{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "from matplotlib import pyplot as plt\n",
    "import seaborn as sns\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "from math import sqrt\n",
    "\n",
    "import sys\n",
    "sys.path.append('../../../')\n",
    "\n",
    "from fedlab.utils.dataset import FMNISTPartitioner\n",
    "from fedlab.utils.functional import partition_report\n",
    "\n",
    "import torch\n",
    "from torch.utils.data import DataLoader\n",
    "from torchvision.datasets import FashionMNIST\n",
    "import torchvision.transforms as transforms"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "%matplotlib inline"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Load Data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "root = \"../../../../data/FMNIST\"\n",
    "trainset = FashionMNIST(root=root, train=True, download=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [],
   "source": [
    "def dict_value2key(d, value):\n",
    "    return list(d.keys())[list(d.values()).index(value)]"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Original data visualization:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-5-fc1a0469ab76>:6: MatplotlibDeprecationWarning: Passing non-integers as three-element position specification is deprecated since 3.3 and will be removed two minor releases later.\n",
      "  ax = fig.add_subplot(4, 20/4, idx+1, xticks=[], yticks=[])\n"
     ]
    },
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 1080x720 with 20 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "class_to_idx = trainset.class_to_idx\n",
    "\n",
    "fig = plt.figure(figsize=(15, 10))\n",
    "\n",
    "for idx in range(20):\n",
    "    ax = fig.add_subplot(4, 20/4, idx+1, xticks=[], yticks=[])\n",
    "    ax.imshow(np.squeeze(trainset[idx][0]), cmap='viridis')\n",
    "    cls_name = dict_value2key(class_to_idx, trainset[idx][1])\n",
    "    ax.set_title(f\"{cls_name}\")\n",
    "    ax.patch.set_facecolor('white')\n",
    "    fig.tight_layout()\n",
    "    \n",
    "fig.savefig(\"../imgs/fmnist_vis.png\", dpi=400, bbox_inches = 'tight')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Data Partition"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [],
   "source": [
    "num_classes = 10\n",
    "num_clients = 10\n",
    "seed = 2021\n",
    "\n",
    "col_names = [f\"class{i}\" for i in range(num_classes)]\n",
    "\n",
    "hist_color = '#4169E1'\n",
    "plt.rcParams['figure.facecolor'] = 'white'"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Label Distribution Skew\n",
    "### Quantity-based"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "1. When \\#C=1:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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pqYmt2ILCgpyxbFu3TrCwsLcai8iIuemOyfmU872M/BKcvbz82P16tUUFBQQGhqK2WwmPT29zcVXaWlpNDU1YbVasVgspKWlnbUfh8OB1Wp1a0FYTk4ODz74IDExMTz66KOu58oiItI9paenux6pdoR3332X8PBwBg8eTFZWlkfX8DNOTVWlVXa7neLi4s4OQ0SkSznT785PP/3U9cgSIGT+2g7tsyLrFrfbpKen07t3bx566KFz7v/48eMMGTKEgoICgoODiY+P5/XXXycqKuq0c//1Z/F92iFMRES6lVdeeQWr1UpMTAw/+9nPWnyXk5NDfHw8MTExTJw4kSNHjgDw5ptvYrFYiImJYeTIkQDs3LmTYcOGYbPZsFqt7N69m82bNzN48GAGDRrExRdfzJQpU1yvBrtDyVlERLqNnTt3kpGRwbp169i2bRsvvPBCi+9TU1MpKipi27ZtREZG8vLLLwPw5JNP8ve//51t27aRl5cHwEsvvcQvf/lLnE4nxcXFBAcHs3fv3hZvE5065i4lZxER6TbWrVvHpEmTuPrqqwG48sorW3xfWlrKiBEjiI6O5rXXXmPnzp0A3Hjjjdx9993k5ORw/PhxAG644QYyMzN5+umnqayspFevXpzpSbEnC+CUnEVEpNswDKPNZHn33XezZMkSduzYwRNPPOF63emll15i4cKFVFdXY7PZOHjwIHfccQd5eXn06tWL5ORk1q1bR3BwMNXV1a7r1dTUeLQTpZKziIh0G6NGjeKNN97g4MGDAHz99dctvj906BD9+/enqamJ1157zXW8vLyc4cOH8+STT3L11VdTXV3Nnj17GDRoELNnz2bChAls376d+Ph4du/ezeeff86xY8dYvnw5EyZMcDtOn9khTERExNvMZjO//vWvuemmm/D39yc2NpaQkBDX9//1X//F8OHDufbaa4mOjubQoUMAzJ07l927d2MYBqNGjSImJoasrCxeffVVTCYT/fr14/HHH6dHjx4sWbKE5ORkjh8/zvTp0zGbzW7HqVep2kGvUomIuK89r1J1Z3qVSkREpAtRchYREfExSs4iIiI+RgvC2mHfvn2kp6d3dhgiIueVfu91Hs2cRUREfIySs4iIiI/xWnLev38/U6ZMITQ0lKioKMaNG0dZWRkVFRVYLBYAiouLmT17tsd9ZGZmut3mpz/9KTabDZvN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xsZGmpubmTRpEgsWLHD7OkrOIiLSaT6N6NhZdOQ/Pu3Q67krICCAdevW0bt3b5qamvjxj3/MT37yE66//nq3rqO9tUVEpFvxZslIPz8/evfuDZzcY7upqcmjdU1KziIi0m2cj5KRx48fx2az0bdvX5KSkjwqGankLCIi3UZ7SkaOGDGC6OhoXnvtNXbu3An8s2RkTk4Ox48fB06WjMzMzOTpp5+msrKSXr16ASf343A6ndTU1LB582ZKS0vdjlPJWUREuo3zUTLylMsvv5yEhATeffddt+NUchYRkW7D2yUjv/zyS+rq6gA4evQo7733HhER7m8BrdXaIiLSbXi7ZGRNTQ3Tpk3j+PHjnDhxgsmTJzN+/Hi349QmJO1wphfpRUSkbdqEpG3nvWSkiIiIeE7JWURExMfomXM71O75P577qfvPDEREurIHV7zd2SF0W5o5i4iI+BivJef9+/czZcoUQkNDiYqKYty4cZSVlVFRUYHFYgGguLiY2bNne9xHZmam223S09MZMGAANpsNm83GO++843H/IiIi3uCV5GwYBikpKSQkJFBeXs6uXbvIzMyktra2xXl2u51FixZ53I8nyRnggQcewOl04nQ6GTdunMf9i4iIeINXknNhYSEmk4kZM2a4jtlsNkaMaFl2cf369a73v+rr65k+fTrx8fHExsayZs0aAHJzc0lNTWXs2LGEhYUxb948AObPn8/Ro0ex2WxMnTrVG8MQEZFuID09nWeffbZDr3n8+HFiY2M9escZ2rkg7M033+S2224767FTSktLiYuLcyuQjIwMEhMTWbp0KXV1dQwbNozRo0cD4HQ6KSkpISAggPDwcGbNmkVWVhZLlizB6XS61Q/AkiVLeOWVV7Db7Tz33HNcccUVp52TnZ1NdnY2APWNx9zuQ0REzu7FGevOfpIb/vOlxA69nqdeeOEFIiMj+e677zxq366Z81NPPdWuY+ciPz+frKwsbDYbCQkJNDQ0UFVVBZzcbi0wMJCePXsSFRVFZWWlx/3MnDmT8vJynE4n/fv358EHHzzjeQ6Hg+LiYoqLi/lBwMUe9yciIr7FmyUjAWpqali7di333XefxzG2OXP+29/+xjvvvMPevXtbLNz67rvv6NGj9aZms5mVK1e6FYhhGKxatYrw8PAWxzdt2kRAQIDrs7+/P83NzW5d+/uuueYa159/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MHLkSCIjIykqKiI1NZWwsDAee+wx4GShj4iICKZNm4bVamXSpEkcOXLktL7z8/O54YYbGDp0KLfddhuHDx8+7ZyEhAQefvhhhg0bxpAhQ/jwww8ByM3N5f7773edN378eNavXw9A7969efjhh4mLi2P06NFs3ryZhIQEBg0aRF5eXof+/ETkdErOIufo3XffJSgoiG3btlFaWsrYsWMBuP/++ykqKqK0tJSjR4/y9ttvu9pcfPHFfPDBB8yYMYNbb72VF198kdLSUnJzczl48CAAn332GQ6Hg+3bt3PZZZfx3//93y36/eqrr1i4cCHvvfceW7duxW6389vf/vaMMTY3N7N582aef/55FixYcNYx1dfXk5CQwJYtW7j00kt57LHHKCgoYPXq1Tz++OOe/qhEpJ2UnEXOUXR0NO+99x4PP/wwH374IYGBgQAUFhYyfPhwoqOjWbduHTt37nS1ObVPe3R0NGazmf79+xMQEMCgQYNchQYGDhzIjTfeCMCdd97J//7v/7bo95NPPmHXrl3ceOON2Gw2li1bRmVl5RljPFU0JC4ujoqKirOO6eKLL3b9IyM6OpqbbroJk8lEdHR0u9qLyLnp0dkBiHR1Q4YMYcuWLbzzzjs88sgjjBkzhnnz5vEf//EfFBcXM3DgQNLT02loaHC1CQgIAOCiiy5y/fnU5+bmZuD0Enz/+tkwDJKSknj99dfPGuOpPvz9/V3X79GjBydOnHCd8/34TCaTq7/vx/j9+ETEezRzFjlH+/bt45JLLuHOO+/koYceYuvWra5Ed/XVV3P48GFWrlzp9nWrqqr4+OOPAXj99df58Y9/3OL766+/no0bN/J///d/ABw5coSysrJ2Xz8kJASn08mJEyeorq5m8+bNbscoIt6hmbPIOdqxYwdz587loosuwmQy8fvf/57LL7+cn//850RHRxMSEkJ8fLzb142MjGTZsmX84he/ICwsjJkzZ7b4vk+fPuTm5nL77bfT2NgIwMKFCxkyZEi7rn/jjTdy3XXXER0djcViYejQoW7HKCLeoapUIj6ooqKC8ePHU1pa2tmhiEgn0G1tERERH6OZs4iIiI/RzFlERMTHKDmLiIj4GCVnERERH6PkLCIi4mOUnEVERHzM/wPNx3865o81QgAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# perform partition\n",
    "noniid_major_label_part = FMNISTPartitioner(trainset.targets, \n",
    "                                           num_clients=num_clients,\n",
    "                                           partition=\"noniid-#label\", \n",
    "                                           major_classes_num=1,\n",
    "                                           seed=seed)\n",
    "\n",
    "# generate partition report\n",
    "csv_file = \"../partition-reports/fmnist_noniid-label_1_clients_10.csv\"\n",
    "partition_report(trainset.targets, noniid_major_label_part.client_dict, \n",
    "                 class_num=num_classes, \n",
    "                 verbose=False, file=csv_file)\n",
    "\n",
    "noniid_major_label_part_df = pd.read_csv(csv_file,header=1)\n",
    "noniid_major_label_part_df = noniid_major_label_part_df.set_index('client')\n",
    "for col in col_names:\n",
    "    noniid_major_label_part_df[col] = (noniid_major_label_part_df[col] * noniid_major_label_part_df['Amount']).astype(int)\n",
    "\n",
    "# select first 10 clients for bar plot\n",
    "noniid_major_label_part_df[col_names].plot.barh(stacked=True)  \n",
    "# plt.tight_layout()\n",
    "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "plt.xlabel('sample num')\n",
    "plt.savefig(f\"../imgs/fmnist_noniid-label_1_clients_10.png\", \n",
    "            dpi=400, bbox_inches = 'tight')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "2. \\#C=2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAecAAAEGCAYAAABfFV1zAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAAA3dklEQVR4nO3df1yUZb7/8RfhiJZFv6xELBQRYYZhENDaViPUcM1jBzTDbKO0ndVz0rVNzdoo6ghRW1upe7aFzbCtR1qawWrbQonW6YdCMirahgfjl6aVaSoIgt7fP/w6G0fBmZGRMd7Px8PHQ+65r/v6zJX58brv674+foZhGIiIiIjPuKCzAxAREZHWlJxFRER8jJKziIiIj1FyFhER8TFKziIiIj6mW2cHcD648sorCQkJ6ewwRETOK1VVVXz33XedHcZ5ScnZBSEhIZSWlnZ2GCIi55W4uLjODuG8pdvaIiIiPkbJWURExMcoOYuIiPgYJWcREREfowVhrthdBhmBnR2FT7rmpvWdHYK4YM/Nts4OQUTcoJmziIiIj/Fact6zZw+pqamEhoYSGRnJ2LFjqaiooKqqCovFAkBpaSmzZs3yuI+srCy322zevJkbbriBqKgo/u3f/o2DBw963L+IiIg3eCU5G4ZBcnIyCQkJVFZWsn37drKysti7d2+r8+Li4li4cKHH/XiSnO+77z6ys7PZunUrycnJ/P73v/e4fxEREW/wSnIuLi7GZDIxffp05zGbzcbw4cNbnbdu3TrGjRsHQH19PVOnTiU+Pp6YmBjy8/MByMvLIyUlhTFjxhAWFsa8efMAmD9/PkeOHMFmszFlyhSXY/vyyy8ZMWIEAKNHj2blypVn9V1FREQ6mleSc3l5ObGxsW61yczMJDExkZKSEoqLi5k7dy719fUAOBwOli9fztatW1m+fDm1tbVkZ2fTs2dPHA4Hr7/+usv9WCwWCgoKAHjrrbeora097Xk5OTnExcURFxfHtw2GW99FRETkbPjMgrDCwkKys7Ox2WwkJCTQ2NhITU0NACNHjiQwMJAePXoQGRlJdXW1x/0sWbKEP/7xj8TGxnLo0CG6d+9+2vPsdjulpaWUlpbS+0I/j/sTERFxl1depTKbzaxYscKtNoZhsHLlSsLDw1sd37BhAwEBAc6f/f39aWlp8Ti2wYMHU1hYCEBFRQVr1qzx+FoiIiLe4JWZc2JiIk1NTeTm5jqPlZSUsH592+/EJiUlsWjRIgzjxC3ksrKyM/ZjMplobm52K7ZvvvkGgOPHj7NgwYJWz8VFRER8gVeSs5+fH6tWraKoqIjQ0FDMZjMZGRkEBQW12SY9PZ3m5masVisWi4X09PQz9mO327FarW4tCHvjjTcYNGgQgwcPJigoiHvvvdfltiIiIueCn3Fyqiptigvyp9Teq7PD8EnaIez8oB3CpDPExcWp3K6HtH2nK4JiIEN/wE5nT2cHICLyE+Qzq7VFRETkBCVnERERH6PkLCIi4mOUnEVERHyMkrOIiIiPUXIWERHxMUrOIiIiPkbJWURExMcoOYuIiPgYJWcREREfo+07XbB7924yMjI6Oww5g+Ej/trZIYiLRiZWdnYIIj5NM2cREREf47XkvGfPHlJTUwkNDSUyMpKxY8dSUVFBVVUVFosFgNLSUmbNmuVxH1lZWW63cTgcXH/99dhsNuLi4ti4caPH/YuIiHiDV5KzYRgkJyeTkJBAZWUl27dvJysri71797Y6Ly4ujoULF3rcjyfJed68eTz++OM4HA6efPJJ5s2b53H/IiIi3uCV5FxcXIzJZGL69OnOYzabjeHDh7c6b926dYwbNw6A+vp6pk6dSnx8PDExMeTn5wOQl5dHSkoKY8aMISwszJlM58+fz5EjR7DZbEyZMsXl2Pz8/Dh48CAAP/zwA0FBQWf1XUVERDqaVxaElZeXExsb61abzMxMEhMTWbJkCQcOHGDo0KGMGjUKOHEruqysjICAAMLDw5k5cybZ2dksXrwYh8PhVj8vvPACSUlJzJkzh+PHj/PJJ5+c9rycnBxycnIAaGhocKsPERE5vebmZurq6mhsbOzsUDpVjx49CA4OxmQynfZzn1mtXVhYSEFBAc8++ywAjY2N1NTUADBy5EgCAwMBiIyMpLq6mn79+nnUz5/+9Ceef/55JkyYwJtvvsm0adN4//33TznPbrdjt9sBNLsWEekgdXV1XHzxxYSEhODn59fZ4XQKwzDYt28fdXV19O/f/7TneOW2ttls5vPPP3erjWEYrFy5EofDgcPhoKamhoiICAACAgKc5/n7+9PS0uJxbEuXLiUlJQWA22+/XQvCRETOocbGRq644ooum5jhxOPVK664ot27B15JzomJiTQ1NZGbm+s8VlJSwvr169tsk5SUxKJFizAMA4CysrIz9mMymWhubnYrtqCgIGcca9euJSwszK32IiJydrpyYj7pTGPgleTs5+fHqlWrKCoqIjQ0FLPZTEZGRru3h9PT02lubsZqtWKxWEhPTz9jP3a7HavV6taCsNzcXB588EGio6N55JFHnM+VRUSka8rIyHA+Uu0I7733HuHh4QwcOJDs7GyPruFnnJyqSpvi4uIoLS3t7DBERM4rp/u784svvnA+sgQImb+mQ/usyr7V7TYZGRn06tWLOXPmnHX/x44dY9CgQRQVFREcHEx8fDxvvPEGkZGRp5z7f8fix7RDmIiIdCmvvvoqVquV6OhofvnLX7b6LDc3l/j4eKKjo5kwYYLzbZ233noLi8VCdHQ0I0aMAGDbtm0MHToUm82G1Wplx44dbNy4kYEDBzJgwAC6d+9Oamqq89Vgdyg5i4hIl7Ft2zYyMzNZu3Ytmzdv5sUXX2z1eUpKCiUlJWzevJmIiAhefvllAJ588kn+8Y9/sHnzZgoKCgB46aWX+M1vfoPD4aC0tJTg4GB27drV6m2ik8fcpeQsIiJdxtq1a5k4cSJXXnklAJdffnmrz8vLyxk+fDhRUVG8/vrrbNu2DYAbb7yRe+65h9zcXI4dOwbADTfcQFZWFk8//TTV1dX07NmT0z0p9mQBnJKziIh0GYZhtJss77nnHhYvXszWrVt5/PHHna87vfTSSyxYsIDa2lpsNhv79u3jzjvvpKCggJ49e5KUlMTatWsJDg6mtrbWeb26ujqP9spQchYRkS5j5MiRvPnmm+zbtw+A77//vtXnhw4dok+fPjQ3N/P66687j1dWVjJs2DCefPJJrrzySmpra9m5cycDBgxg1qxZjB8/ni1bthAfH8+OHTv46quvOHr0KMuWLWP8+PFux+kzO4SJiIh4m9ls5ne/+x033XQT/v7+xMTEEBIS4vz8v/7rvxg2bBjXXXcdUVFRHDp0CIC5c+eyY8cODMNg5MiRREdHk52dzWuvvYbJZOKaa67hscceo1u3bixevJikpCSOHTvG1KlTMZvNbsepV6lcoFepRETc58qrVF2ZXqUSERE5jyg5i4iI+BglZxERER+jBWEu2Lvzf3nujnGdHYZPOhQR19khiAsyMjI6OwQRcYNmziIiIj5GyVlERMTHeC0579mzh9TUVEJDQ4mMjGTs2LFUVFRQVVWFxWIBoLS0lFmzZnncR1ZWlttt7rjjDmw2GzabjZCQEGw2m8f9i4jI+a+jS0ZOnTqVq666ypnrPOGVZ86GYZCcnExaWhrLli0DwOFwsHfv3lYbgsfFxREX5/kzy6ysLB555BG32ixfvtz5+wcffJDAwECP+xcRkbOU0cF/B2f80LHX88A999zD/fffz9133+3xNbwycy4uLsZkMjF9+nTnMZvNxvDhw1udt27dOsaNO7HQqr6+nqlTpxIfH09MTIyzxFZeXh4pKSmMGTOGsLAw5s2bB8D8+fM5cuQINpuNKVOmuB2jYRi8+eabTJ482dOvKSIi5yFvlowEGDFixCkFNdzlleRcXl5ObGysW20yMzNJTEykpKSE4uJi5s6dS319PXBi1r18+XK2bt3K8uXLqa2tJTs7m549e+JwOFrtf+qqjz76iKuvvpqwsLDTfp6Tk+Oc2dc3HXX7+iIi4nu8XTKyo/jMgrDCwkKys7Ox2WwkJCTQ2NhITU0NcGKj8sDAQHr06EFkZCTV1dVn3d8bb7zR7qzZbrdTWlpKaWkpFwV0P+v+RESk83m7ZGRH8UpyNpvNfP755261MQyDlStX4nA4cDgc1NTUOPccDQgIcJ7n7+9PS0vLWcXX0tLC22+/zR133HFW1xERkfOLt0tGdhSvJOfExESamprIzc11HispKWH9+vVttklKSmLRokXOQtVlZWVn7MdkMtHc3Ox2fO+//z6DBw/u0FsQIiLi+7xdMrKjeCU5+/n5sWrVKoqKiggNDcVsNpORkdFuwen09HSam5uxWq1YLBbS09PP2I/dbsdqtbq9IGzZsmVaCCYi0gX9uGRkdHQ0v/3tb1t9frJk5OjRoxk8eLDz+Ny5c4mKisJisTBixAiio6NZvnw5FosFm83GP//5T+fq7MmTJ3PDDTfw5ZdfEhwc7Hxu7Q6VjHSBSkaKiLhPJSPbp5KRIiIi5xElZxERER+j5CwiIuJjlJxFRER8jJKziIiIj1FyFhER8TFKziIi0qV1ZMnI2tpabr75ZiIiIjCbzafs3e0qr5SMFBERcUXU0qgOvd7WtK0dej13devWjeeee44hQ4Zw6NAhYmNjGT16NJGRkW5dRzNnERHpUrxZMrJPnz4MGTIEgIsvvpiIiAh27drldoxKziIi0mWcy5KRVVVVlJWVMWzYMLfj1G1tV+wug4zAzo7CJ9U1ru7sEMQFwdnDOzsEEZ/gSsnIRx99lAMHDnD48GGSkpKAf5WMnDRpEikpKcCJkpGZmZnU1dWRkpJCWFiY8zqHDx9mwoQJvPDCC1xyySVux6mZs4iIdBnnomRkc3MzEyZMYMqUKc5E7i6vJec9e/aQmppKaGgokZGRjB07loqKCqqqqrBYLACUlpYya9Ysj/vIysryqN2iRYsIDw/HbDYzb948j/sXEZHzi7dLRhqGwbRp04iIiDil4pU7vHJb2zAMkpOTSUtLY9myZQA4HA727t1Lv379nOfFxcURFxfncT9ZWVk88sgjbrUpLi4mPz+fLVu2EBAQwDfffONx/yIicn75cclIf39/YmJiCAkJcX5+smTkddddR1RUFIcOHQJOlIzcsWMHhmEwcuRIoqOjyc7O5rXXXsNkMnHNNdfw2GOP8fHHH/PXv/6VqKgobDYbcCJXjR071q04vVIycu3atWRkZPDhhx+e8llVVRXjxo2jvLycdevW8eyzz7J69Wrq6+uZOXMmW7dupaWlhYyMDG677Tby8vIoKCigoaGByspKkpOTeeaZZ5g/fz6///3viYqKwmw2t/oXTnsmTZqE3W5n1KhRLn+fuCB/Su29XD6/K9Ez5/ODnjlLZ1DJyPad85KR5eXlxMbGutUmMzOTxMRESkpKKC4uZu7cudTX1wMnZt3Lly9n69atLF++nNraWrKzs+nZsycOh8PlxAxQUVHBRx99xLBhw7jpppsoKSk57Xk5OTnOmf23DSp5LSIi547PrNYuLCykoKDAuUtLY2MjNTU1wIlnBIGBJ1ZLR0ZGUl1d3er2uDtaWlrYv38/n332GSUlJUyaNImdO3eeskDAbrdjt9uBEzNnERGRc8UrydlsNrNixQq32hiGwcqVKwkPD291fMOGDQQEBDh/9vf3p6WlxePYgoODSUlJwc/Pj6FDh3LBBRfw3Xff0bt3b4+vKSIi0pG8cls7MTGRpqYmcnNzncdKSkpYv359m22SkpJYtGgRJx+Bl5WVnbEfk8lEc3OzW7H9+7//u3O5e0VFBUePHnW+7yYiIuILvJKc/fz8WLVqFUVFRYSGhmI2m8nIyCAoKKjNNunp6TQ3N2O1WrFYLKSnp5+xH7vdjtVqZcqUKS7HNnXqVHbu3InFYiE1NZWlS5e2+86biIjIueaV1do/NVqt3Tat1j4/aLW2dAat1m5fe2PhMwvCfFpQDGSUnvm8Lij4zKeIiPi0jIwMevXqxZw5c876Wo2NjYwYMYKmpiZaWlqYOHEiTzzxhNvXUXIWEZFO88Xgjp1FR/zziw69nrsCAgJYu3YtvXr1orm5mZ///Of84he/4Prrr3frOtpbW0REuhRvloz08/OjV68Tj0Gbm5tpbm72aF2TkrOIiHQZ56Jk5LFjx7DZbFx11VWMHj3ao5KRSs4iItJluFIycvjw4URFRfH666+zbds24F8lI3Nzczl27BhwomRkVlYWTz/9NNXV1fTs2RM4sR+Hw+Ggrq6OjRs3Ul5e7nacSs4iItJlnIuSkSddeumlJCQk8N5777kdp5KziIh0Gd4uGfntt99y4MABAI4cOcL777/P4MGD3Y5Tq7VFRKTL8HbJyLq6OtLS0jh27BjHjx9n0qRJjBs3zu04tQmJC073Ir2IiLRPm5C075yXjBQRERHPKTmLiIj4GD1zdsHenf/Lc3e4/8ygK7D9unN34xHXjEys7OwQRMQNmjmLiIj4GK8l5z179pCamkpoaCiRkZGMHTuWiooKqqqqsFgsAJSWljJr1iyP+8jKynK7TUZGBn379sVms2Gz2Xj33Xc97l9ERMQbvJKcDcMgOTmZhIQEKisr2b59O1lZWezdu7fVeXFxcSxcuNDjfjxJzgAPPPAADocDh8PB2LFjPe5fRETEG7ySnIuLizGZTEyfPt15zGazMXx465qy69atc77/VV9fz9SpU4mPjycmJob8/HwA8vLySElJYcyYMYSFhTFv3jwA5s+fz5EjR7DZbEyZMsUbX0NERLqAjIwMnn322Q695rFjx4iJifHoHWdwcUHYW2+9xe23337GYyeVl5cTGxvrViCZmZkkJiayZMkSDhw4wNChQxk1ahQADoeDsrIyAgICCA8PZ+bMmWRnZ7N48WIcDodb/QAsXryYV199lbi4OJ577jkuu+yyU87JyckhJycHgPqmo273ISIiZ/bH6WvPfJIb/vOlxA69nqdefPFFIiIiOHjwoEftXZo5P/XUUy4dOxuFhYVkZ2djs9lISEigsbGRmpoa4MR2a4GBgfTo0YPIyEiqq6s97mfGjBlUVlbicDjo06cPDz744GnPs9vtlJaWUlpaykUB3T3uT0REfIs3S0YC1NXVsWbNGu677z6PY2x35vz3v/+dd999l127drVauHXw4EG6dWu7qdlsZsWKFW4FYhgGK1euJDw8vNXxDRs2EBAQ4PzZ39+flpYWt679Y1dffbXz97/61a88vuUgIiLnn5MlIz/++GOuvPJKvv/++1Zrn1JSUvjVr34FwKOPPsrLL7/MzJkznSUj+/bt69w7+2TJyClTpnD06FFntarZs2fzzDPPOLf+9ES7M+egoCDi4uLo0aMHsbGxzl/jx4/nH//4R5vtEhMTaWpqIjc313mspKSE9evXt9kmKSmJRYsWcXI30bKysjMGbzKZaG5uPuN5P/b11187f79q1SrnynEREfnp83bJyNWrV3PVVVe5/Wj3/2p35hwdHU10dDR33nknJpPJ5Yv6+fmxatUqZs+eTXZ2Nj169CAkJIQXXnihzTbp6enMnj0bq9WKYRiEhISwevXqdvux2+1YrVaGDBnSqnpIe+bNm4fD4cDPz4+QkBD+/Oc/u/y9RETk/OZKych33nmH6Oho8vLyWLduHXBilrxhwwbWrFmDzWbD4XBw5513MmzYMNasWUNSUhJ/+ctf+PjjjykoKODdd9+lsbGRgwcPctddd/Haa6+5FadLhS8+/vhjMjIyqK6upqWlxfnldu7c6VZn56t+l1/K7NE/7+wwfJJ2CDs/aIcw6QyuFL441wvCtm3bRnJyMp9++ilXXHGF87Z2r169mDNnDldeeSXbt2/nsssuY+zYsfTt25e8vDwqKysJDQ0FICYmhldeeYVLLrmE/v374+fnx+zZswkJCWH27NnOvtatW8ezzz7b5kSzvcIXLq3WnjZtGs8//zyxsbH4+/u70uQn5eoBA3lwefuzeBER8X3eLhnZUVyaOQ8bNowNGzZ0WKfnG5WMFBFxn0pGtu+sZ84333wzc+fOJSUlpdXK6SFDhnRMhCIiIuLkUnI+OWv+8b+A/Pz8WLu2Y58ViIiIiIvJubi42NtxiIiIyP/n0g5he/fuZdq0afziF78AYPv27bz88steDUxERKSrcik533PPPSQlJbF7924ABg0a1O47yyIiIuI5l5Lzd999x6RJk7jgghOnd+vWrUu+UiUiInIuuPTM+aKLLmLfvn3OXVU+++wzAgMDvRqYiIjIuZCRkeHchKQjhISEcPHFF+Pv70+3bt08ehXXpeT8hz/8gfHjx1NZWcmNN97It99+63ZhCxERkf/ruTs6tviQr2wYVVxc7Ny/2xMuJechQ4awfv16vvzySwzDIDw83K29tkVERHzFq6++yrPPPoufnx9Wq9W5LSecKBmZk5PD0aNHGThwIH/961+58MILeeutt3jiiSfw9/cnMDCQDz/8kG3btnHvvfdy9OhRjh8/zsqVKwkLC+uQGNtNzmvXriUxMZG333671fGKigrgRGmtruCb6kMdvv+rdLzbLtU/GM8XwdnDOzsE6aLORclIPz8/brnlFvz8/Pj1r3+N3W53O852k/P69etJTEzkb3/72ymf+fn5dZnkLCIiPw2ulIx89NFHOXDgAIcPHyYpKQn4V8nISZMmOXPfDTfcQGZmJnV1daSkpDhnzR9//DFBQUF88803jB49msGDBzNixAi34mx3tfYTTzwBwCuvvHLKryVLlrR74T179pCamkpoaCiRkZGMHTuWiooKqqqqnDWUS0tLmTVrllsB/1hWVpbHbU/e0vjuu+88voaIiJxfXCkZuXjxYrZu3crjjz9OY2MjcGKWvGDBAmpra7HZbOzbt48777yTgoICevbsSVJSknPXzKCgIACuuuoqkpOT2bhxo9txtjtz/sMf/tBu49/+9renPW4YBsnJyaSlpbFs2TIAHA4He/fupV+/fs7z4uLiiIuLczdmp6ysLB555BG329XW1lJUVMS1117rcd8iInL+GTlyJMnJyTzwwAPOkpE/dujQIfr06UNzczOvv/46ffv2BaCyspJhw4YxbNgw/va3v1FbW8sPP/zAgAEDmDVrFjt37mTLli0MGzaM48ePc/HFF1NfX09hYaFH1aranTkfOnSozV+HDx9us11xcTEmk4np06c7j9lsNoYPb/2cad26dYwbd2KlXn19PVOnTiU+Pp6YmBjy8/MByMvLIyUlhTFjxhAWFsa8efMAmD9/PkeOHMFmszFlyhS3vvQDDzzAM8880+6/nkRE5KfnxyUjo6OjT5lkniwZefJ29Elz584lKioKi8XCiBEjiI6OZvny5VgsFmw2G//85z+5++672bt3Lz//+c+Jjo5m6NCh3HrrrYwZM8btONudOT/++OMApKWl8eKLL3LppZcCsH//fh588ME225WXlxMbG+tWIJmZmSQmJrJkyRIOHDjA0KFDGTVqFHBi1l1WVkZAQADh4eHMnDmT7OxsFi9ejMPhcKufgoIC+vbtS3R0dLvn5eTkkJOTA8DhxgNu9SEiIq7pjFef0tLSSEtLO+1nM2bMYMaMGacc/78LowEefvhhHn744VbHLr/8cjZv3nzWMbr0KtWWLVuciRngsssuo6ys7Kw7/7HCwkIKCgp49tlnAWhsbKSmpgY4cRvi5KYnkZGRVFdXt7o97qqGhgYyMzMpLCw847l2u925wu7a3uFu9yUiIuIpl5Lz8ePH2b9/P5dddhkA33//PS0tLW2ebzab3d6kxDAMVq5cSXh460S4YcOGVjWk/f392+27PZWVlXz11VfOWXNdXR1Dhgxh48aNXHPNNR5dU0REpKO5tLf2gw8+yM9+9jPS09N57LHH+NnPfuZ89ns6iYmJNDU1kZub6zxWUlLC+vXr22yTlJTEokWLMAwDwKWZuclkorm52ZWvAEBUVBTffPMNVVVVVFVVERwczKZNm5SYRUTEp7iUnO+++25WrlzJ1VdfTe/evXn77bf55S9/2eb5fn5+rFq1iqKiIkJDQzGbzWRkZDiXl59Oeno6zc3NWK1WLBYL6enpZ4zLbrdjtVrdXhAmIiLiy/yMk1NVaVNcXJxHG5eLiHRlp/u784svviAiIqKTIvIt7Y2FSzNnEREROXeUnEVEpEvLyMhwvinUEQ4cOMDEiRMZPHgwERERfPrpp25fw6XV2iIiIt5QN/+jDr2eLxRV+c1vfsOYMWNYsWIFR48epaGhwe1raOYsIiJdyquvvorVaiU6OvqUxc25ubnEx8cTHR3NhAkTnIn1rbfewmKxEB0d7SxisW3bNoYOHYrNZsNqtbJjxw4OHjzIhx9+yLRp0wDo3r17q31CXKXkLCIiXcbJkpFr165l8+bNvPjii60+T0lJoaSkhM2bNxMREcHLL78M4CwZuXnzZgoKCoB/lYx0OByUlpYSHBzMzp076d27N/feey8xMTHcd9991NfXux2nkrOIiHQZrpSMHD58OFFRUbz++uts27YN+FfJyNzcXGfd5htuuIGsrCyefvppqqur6dmzJy0tLWzatIkZM2ZQVlbGRRddRHZ2tttxKjmLiEiX4e2SkcHBwQQHBzNs2DAAJk6cyKZNm9yOU8lZRES6jJEjR/Lmm2+yb98+gDOWjDzpZMnIJ598kiuvvJLa2lp27tzpLBk5fvx4tmzZwjXXXEO/fv348ssvAfjggw+IjIx0O06t1hYRkS7jxyUj/f39iYmJISQkxPn5yZKR1113HVFRURw6dAg4UTJyx44dGIbByJEjiY6OJjs7m9deew2TycQ111zjrNu8aNEipkyZwtGjRxkwYACvvPKK23FqhzAXaIcwERH3aYew9rU3Fpo5u2Drrh8Imb+ms8OQM/j7O3M6OwSRn5SIf37R2SF0WXrmLCIi4mOUnEVERHyM15Lznj17SE1NJTQ0lMjISMaOHUtFRQVVVVVYLBYASktLmTVrlsd9ZGVlud0mPT0dq9WKzWbjlltuYffu3R73LyIi4g1eSc6GYZCcnExCQgKVlZVs376drKws9u7d2+q8uLg4Fi5c6HE/niTnuXPnsmXLFhwOB+PGjePJJ5/0uH8RERFv8EpyLi4uxmQyMX36dOcxm83G8OGtNyRft24d48aNA6C+vp6pU6cSHx9PTEwM+fn5AOTl5ZGSksKYMWMICwtj3rx5AMyfP58jR45gs9mYMmWKy7Fdcsklzt/X19e3+zK6iIhIZ/DKau3y8nJiY2PdapOZmUliYiJLlizhwIEDDB06lFGjRgHgcDgoKysjICCA8PBwZs6cSXZ2NosXL8bhcLgd3+9+9zteffVVAgMDKS4uPu05OTk55OTkAHCs4Qe3+xARkfNDRkYGvXr1Ys6cs3/j48svv+SOO+5w/rxz506efPJJZs+e7dZ1fOZVqsLCQgoKCpw1NRsbG6mpqQFO7OgSGBgIQGRkJNXV1fTr18/jvjIzM8nMzOSpp55i8eLFPPHEE6ecY7fbsdvtAAT0CfO4LxERaVtGRoZPX89d4eHhzknjsWPH6Nu3L8nJyW5fxyu3tc1mM59//rlbbQzDYOXKlTgcDhwOBzU1Nc6XswMCApzn+fv709LS0iFx3nnnnaxcubJDriUiIucHb5aM/LEPPviA0NBQrrvuOrdj9EpyTkxMpKmpidzcXOexkpIS1q9f32abpKQkFi1axMkNy8rKys7Yj8lkorm52a3Yfjx4BQUFDB482K32IiJy/vJ2ycgfW7ZsGZMnT/YoTq8kZz8/P1atWkVRURGhoaGYzWYyMjIICgpqs016ejrNzc1YrVYsFgvp6eln7Mdut2O1Wt1aEDZ//nwsFgtWq5XCwsJT/sOIiMhPl7dLRp509OhRCgoKuP322z2K02vPnIOCgnjzzTdP+1l5eTkACQkJJCQkANCzZ0/+/Oc/n3LuPffcwz333OP8efXq1c7fP/300zz99NNuxeXJbeyovoGUZt/qdjs5x/TfSETOwJWSke+88w7R0dHk5eWxbt064MQsecOGDaxZswabzYbD4eDOO+9k2LBhrFmzhqSkJP7yl7+QmJgIwN///neGDBnC1Vdf7VGc2iFMRES6DG+XjDzpjTfe8PiWNvjQam0RERFvOxclIxsaGigqKjrt3WBXqWSkC1QyUkTEfSoZ2b72xkK3tUVERHyMkrOIiIiPUXIWERHxMUrOIiIiPkbJWURExMcoOYuIiPgYJWcREenSMjIynBURO8Lzzz+P2WzGYrEwefJkGhsb3b6GNiFxwbZ924haGtXZYYj8ZHx77V87OwRxwZ6bbV7v44O1oR16vZGJlR16PXft2rWLhQsXsn37dnr27MmkSZNYtmxZq22oXaGZs4iIdCneLhnZ0tLCkSNHaGlpoaGhod2iT23xWnLes2cPqamphIaGEhkZydixY6moqKCqqgqLxQJAaWkps2bN8riPrKwst9vMnTuXwYMHY7VaSU5O5sCBAx73LyIi5xdvl4zs27cvc+bM4dprr6VPnz4EBgZyyy23uB2nV5KzYRgkJyeTkJBAZWUl27dvJysri71797Y6Ly4ujoULF3rcjyfJefTo0ZSXl7NlyxYGDRrEU0895XH/IiJyfvF2ycj9+/eTn5/PV199xe7du6mvr+e1115zO06vJOfi4mJMJhPTp093HrPZbAwfPrzVeevWrWPcuHEA1NfXM3XqVOLj44mJiSE/Px+AvLw8UlJSGDNmDGFhYcybNw84UZf5yJEj2Gw2t+o533LLLXTrduJR+/XXX09dXd1ZfVcRETl/uFIycvHixWzdupXHH3/cuZjrpZdeYsGCBdTW1mKz2di3bx933nknBQUF9OzZk6SkJNauXcv7779P//796d27NyaTiZSUFD755BO34/RKci4vLyc2NtatNpmZmSQmJlJSUkJxcTFz586lvr4eAIfDwfLly9m6dSvLly+ntraW7OxsevbsicPhaFXWyx1LlizhF7/4xWk/y8nJIS4ujri4OI4dOubR9UVExLd4u2Tktddey2effUZDQwOGYfDBBx94VOjDZ1ZrFxYWUlBQ4FzO3tjYSE1NDXBiMAMDAwGIjIykurqafv36nVV/mZmZdOvWrc1Zt91ux263A9Czf8+z6ktERHyDt0tGXn755UycOJEhQ4bQrVs3YmJi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q9XKxIkTaWhoOKXvwsJCbrjhBoYMGcLtt9/O4cOHTzknISGBhx56iKFDhzJo0CA++ugjAPLy8rj//vud540bN45169YB0KtXLx566CFiY2MZNWoUGzduJCEhgQEDBlBQUNCh4ycip1JyFjlL7733HkFBQWzevJny8nLGjBkDwP33309JSQnl5eUcOXKE1atXO9t0796dDz/8kOnTp3Pbbbfxxz/+kfLycvLy8ti3bx8AX375JXa7nS1btnDJJZfw3//93636/e6771iwYAHvv/8+mzZtIi4ujj/84Q+njbGlpYWNGzfywgsv8MQTT5zxO9XX15OQkMDnn3/OxRdfzKOPPkpRURGrVq3iscce83SoRMRFSs4iZykqKor333+fhx56iI8++ojAwEAAiouLGTZsGFFRUaxdu5Zt27Y525zcpz0qKgqz2UyfPn0ICAhgwIABzsIH/fr148YbbwTgrrvu4n/+539a9fvZZ5+xfft2brzxRmw2G0uXLqW6uvq0MZ4sYBIbG0tVVdUZv1P37t2d/8iIioripptuwmQyERUV5VJ7ETk73To7AJHz3aBBg/j888959913efjhh7nllluYN28e//Ef/0FpaSn9+vUjIyODxsZGZ5uAgAAALrjgAufvT/7c0tICnFoS8P/+bBgGo0eP5o033jhjjCf78Pf3d16/W7duHD9+3HnOj+MzmUzO/n4c44/jExHv0cxZ5Czt3r2bCy+8kLvuuos5c+awadMmZ6K78sorOXz4MCtWrHD7ujU1NXz66acAvPHGG/z85z9v9fn111/Pxx9/zP/+7/8C0NDQQEVFhcvXDwkJweFwcPz4cWpra9m4caPbMYqId2jmLHKWtm7dyty5c7ngggswmUz86U9/4tJLL+VXv/oVUVFRhISEEB8f7/Z1IyIiWLp0Kb/+9a8JCwtjxowZrT7v3bs3eXl5TJ48maamJgAWLFjAoEGDXLr+jTfeSP/+/YmKisJisTBkyBC3YxQR71BVKhEfVFVVxbhx4ygvL+/sUESkE+i2toiIiI/RzFlERMTHaOYsIiLiY5ScRUREfIySs4iIiI9RchYREfExSs4iIiI+5v8B6NSK4kAMAkYAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# perform partition\n",
    "noniid_major_label_part = FMNISTPartitioner(trainset.targets, \n",
    "                                           num_clients=num_clients,\n",
    "                                           partition=\"noniid-#label\", \n",
    "                                           major_classes_num=2,\n",
    "                                           seed=seed)\n",
    "\n",
    "# generate partition report\n",
    "csv_file = \"../partition-reports/fmnist_noniid-label_2_clients_10.csv\"\n",
    "partition_report(trainset.targets, noniid_major_label_part.client_dict, \n",
    "                 class_num=num_classes, \n",
    "                 verbose=False, file=csv_file)\n",
    "\n",
    "noniid_major_label_part_df = pd.read_csv(csv_file,header=1)\n",
    "noniid_major_label_part_df = noniid_major_label_part_df.set_index('client')\n",
    "for col in col_names:\n",
    "    noniid_major_label_part_df[col] = (noniid_major_label_part_df[col] * noniid_major_label_part_df['Amount']).astype(int)\n",
    "\n",
    "# select first 10 clients for bar plot\n",
    "noniid_major_label_part_df[col_names].plot.barh(stacked=True)  \n",
    "# plt.tight_layout()\n",
    "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "plt.xlabel('sample num')\n",
    "plt.savefig(f\"../imgs/fmnist_noniid-label_2_clients_10.png\", \n",
    "            dpi=400, bbox_inches = 'tight')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "3. \\#C=3"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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idTX15Odne08VlhYyLp165rtk5SUxMKFCzGMU5eQi4uLzzuOyWSioaHBpdiCgoKccaxZs4awsDCX+ouIyIXpyIn5tPN9Bx5Jzn5+fqxcuZL8/HxCQ0Mxm82kpaW1uPgqNTWVhoYGrFYrFouF1NTU845jt9uxWq0uLQjLzs7m0UcfJTo6mieffNJ5X1lERDqmtLQ05y3VtvDBBx8QHh5Ov379yMzMdOscfsbpqao0Ky4ujqKiIm+HISLSrpzr384vv/zSecsSIGTO6jYdszzzdpf7pKWl0bVrVx577LELHv/EiRP079+f/Px8goODiY+P58033yQyMvKstv/6XZxJO4SJiEiH8tprr2G1WomOjubnP/95k/eys7OJj48nOjqacePGcfToUQDefvttLBYL0dHRDB06FIDt27czaNAgbDYbVquVXbt2sXHjRvr160ffvn25/PLLmThxovPRYFcoOYuISIexfft20tPTWbNmDVu2bOHll19u8n5KSgqFhYVs2bKFiIgIXn31VQCeffZZPvzwQ7Zs2UJubi4Af/zjH/nVr36Fw+GgqKiI4OBg9uzZ0+RpotPHXKXkLCIiHcaaNWsYP348119/PQDXXnttk/dLSkoYMmQIUVFRvPHGG2zfvh2AW265hfvuu4/s7GxOnDgBwM0330xGRgbPP/88FRUVdOnShXPdKXZnAZySs4iIdBiGYbSYLO+77z4WLVrEtm3beOaZZ5yPO/3xj39k3rx5VFVVYbPZOHjwIHfffTe5ubl06dKFpKQk1qxZQ3BwMFVVVc7zVVdXu7UTpZKziIh0GMOGDeOtt97i4MGDAHz33XdN3j98+DC9evWioaGBN954w3m8rKyMwYMH8+yzz3L99ddTVVXF7t276du3LzNnzmTs2LFs3bqV+Ph4du3axVdffcXx48dZunQpY8eOdTlOn9khTERExNPMZjO/+c1vuPXWW/H39ycmJoaQkBDn+//1X//F4MGDueGGG4iKiuLw4cMAzJo1i127dmEYBsOGDSM6OprMzExef/11TCYTPXv25Omnn6ZTp04sWrSIpKQkTpw4wdSpUzGbzS7HqUepWkGPUomIuK41j1J1ZHqUSkREpB1RchYREfExSs4iIiI+RgvCWmHbnu/bfIu59uTKiDneDuGSM+6rcd4OQbwoLS3N2yGIj9PMWURExMcoOYuIiPgY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jbN//3569eoFQK9evfjmm2/O2S4rK4usrCwAThy9dOoZi4iI7/OZR6ny8vLIzc3lxRdfBKCuro7KykoAhg0bRmBgIACRkZFUVFTQp08fj8Zjt9ux2+0ABPQK8+hYIiIiZ/JIcjabzSxfvtylPoZhsGLFCsLDw5sc37BhAwEBAc7X/v7+NDY2uh1bjx49+Prrr+nVqxdff/013bt3d/tcIiIinuCRe86JiYnU19eTnZ3tPFZYWMi6deua7ZOUlMTChQsxDAOA4uLi845jMploaGhwKbaxY8eyZMkSAJYsWcIdd9zhUn8RERFP80hy9vPzY+XKleTn5xMaGorZbCYtLY2goKBm+6SmptLQ0IDVasVisZCamnrecex2O1ar1aUFYXPmzCE/P5+wsDDy8/OZM2dOq/uKiIhcDH7G6amqNCsuLo6ioiJvhyEi0q7o3073aYcwERERH6PkLCIi4mOUnEVERHyMkrOIiIiPUXIWERHxMVqt3Qpdu3ZlwIAB3g7jvA4cOEC3bt28HUartJdY20ucoFg9ob3ECb4Za3l5Od9++623w2iXfGb7Tl82YMCAdvE4QHt6bKG9xNpe4gTF6gntJU5oX7HK+emytoiIiI9RchYREfExSs6tcLo6la9rL3FC+4m1vcQJitUT2kuc0L5ilfPTgjAREREfo5mziIiIj1FyFhER8TFKzi344IMPCA8Pp1+/fmRmZnolhqlTp9K9e3csFovz2HfffceIESMICwtjxIgRHDp0yPnec889R79+/QgPD+fDDz90Ht+0aRNRUVH069ePmTNn0tZ3M6qqqrjtttuIiIjAbDbz8ssv+2SsdXV1DBo0iOjoaMxmM88884xPxnmmEydOEBMTw5gxY3w61pCQEKKiorDZbMTFxflsrDU1NYwfP54BAwYQERHB559/7pNx7ty5E5vN5vxz1VVXMX/+fJ+MVTzAkHNqbGw0+vbta5SVlRn19fWG1Wo1tm/fftHjWLdunbFp0ybDbDY7j82aNct47rnnDMMwjOeee86YPXu2YRiGsX37dsNqtRp1dXXG7t27jb59+xqNjY2GYRhGfHy88dlnnxknT540Ro0aZbz33nttGufevXuNTZs2GYZhGD/88IMRFhZmbN++3ediPXnypHH48GHDMAzj+PHjxqBBg4zPP//c5+I800svvWRMmjTJuP322w3D8M2/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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# perform partition\n",
    "noniid_major_label_part = FMNISTPartitioner(trainset.targets, \n",
    "                                           num_clients=num_clients,\n",
    "                                           partition=\"noniid-#label\", \n",
    "                                           major_classes_num=3,\n",
    "                                           seed=seed)\n",
    "\n",
    "# generate partition report\n",
    "csv_file = \"../partition-reports/fmnist_noniid-label_3_clients_10.csv\"\n",
    "partition_report(trainset.targets, noniid_major_label_part.client_dict, \n",
    "                 class_num=num_classes, \n",
    "                 verbose=False, file=csv_file)\n",
    "\n",
    "noniid_major_label_part_df = pd.read_csv(csv_file,header=1)\n",
    "noniid_major_label_part_df = noniid_major_label_part_df.set_index('client')\n",
    "for col in col_names:\n",
    "    noniid_major_label_part_df[col] = (noniid_major_label_part_df[col] * noniid_major_label_part_df['Amount']).astype(int)\n",
    "\n",
    "# select first 10 clients for bar plot\n",
    "noniid_major_label_part_df[col_names].plot.barh(stacked=True)  \n",
    "# plt.tight_layout()\n",
    "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "plt.xlabel('sample num')\n",
    "plt.savefig(f\"../imgs/fmnist_noniid-label_3_clients_10.png\", \n",
    "            dpi=400, bbox_inches = 'tight')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Distribution-based (Dirichlet)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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LS0lNjbWrUAyMjJISEhg4cKF1NTUMHDgQO644w4AnE4nJSUlBAQEEB4ezrRp08jKymLBggU4nU635gFYsGABr7/+Ona7nd///vdcccUVp7XJzs4mOzsbgONHfnB7DhERObtXpqw+eyM3/OeffKM++csvv0xERAQ//vijR/1bdeY8Z86cVh07F/n5+WRlZWGz2YiPj6euro7Kykrg5HZrgYGBdO3alcjISHbt2uXxPFOnTqW8vByn00nPnj157LHHztjO4XBQXFxMcXEx/pcEejyfiIj4Fm+WjASorq5m5cqVPPTQQx7H2OKZ89///nc++OADdu/e3WTh1o8//kiXLs13NZvNLF261K1ADMNg2bJlhIeHNzm+bt06AgICXK/9/f1pbDz74y3Nufbaa10//+pXv/L4koOIiHQ8p0pGfvbZZ1x99dV8//33TdY+JScn86tf/QqAp59+mtdee41p06a5Skb26tXLtXf2qZKREydO5NixY65qVY888ggvvPCCa+tPT7R45hwUFITdbqdr167Exsa6/owePZqPPvqo2X4JCQnU19eTk5PjOlZUVMTatWub7ZOYmMj8+fM5tZtoSUnJWYM3mUw0NDSctd1PffPNN66fly9f7lo5LiIiFz5vl4x8//336dGjh9u3dv9Vi2fO0dHRREdHM2HCBEwmU6sH9fPzY/ny5TzyyCNkZWXRtWtXQkJCmDt3brN90tLSeOSRR7BarRiGQUhICO+//36L8zgcDqxWKwMGDGhSPaQlM2fOxOl04ufnR0hICH/+859b/blERKRja03JyL/+9a9ER0eTm5vLmjVrgJNnyevWrWPlypXYbDacTicTJkxg0KBBrFy5ksTERF599VU+++wz8vLy+OCDD6irq+PHH3/kvvvu480333QrzlYtCFu/fj3p6ens2rWLxsZG14fbuXNns32CgoJ45513zvjeqcLT8fHxxMfHA9CtW7czJspJkyYxadIk1+ufJuznn3+e559/vjUfweWNN95wq72IiFw4hg4dSlJSEo8++ihXXXXVWUtG9urVC/hnychBgwbxt7/9jaqqKn744QdXycidO3eyefNm5syZ41qTtWbNGl588UW3EzO0Mjk/+OCD/OEPfyA2NhZ/f3+3J+noonoFUpx1Z3uH4cMuvNXsW079kHL2tqfXlDm/q0XTGXz2Ri30BtjbJpGI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f/wxTzzxBJ9++imBgYEAFBYWMmjQIKKioli9ejVbt2519Tm1T3tUVBRms5mePXsSEBBA3759XQUGevfuzS233ALAfffdx//93/81mffLL79k27Zt3HLLLdhsNhYtWsSuXbvOGOOpYiOxsbFUVFSc9TNdfPHFrl8yoqKiuO222zCZTERFRbWqv4icmy7tHYBIR9evXz82bNjABx98wJNPPsnw4cOZOXMm//Ef/0FxcTG9e/cmPT2duro6V5+AgAAALrroItfPp143NjYCp5fe+9fXhmEwbNgw3n777bPGeGoOf39/1/hdunThxIkTrjY/jc9kMrnm+2mMP41PRLxHZ84i52jPnj1ccskl3HfffTz++ONs3LjRleiuvvpqDh8+zNKlS90et7Kyki+++AI4WT3o1ltvbfL+TTfdxGeffcb/+3//D4AjR45QVlbW6vFDQkJwOp2cOHGCqqoq1q9f73aMIuIdOnMWOUdbtmxhxowZXHTRRZhMJv74xz9y+eWX86tf/YqoqChCQkKIi4tze9yIiAgWLVrEr3/9a8LCwpg6dWqT96+55hpyc3MZP3489fX1AMyePZt+/fq1avxbbrmFPn36EBUVhcViYcCAAW7HKCLeoapUIj6ooqKCUaNGUVpa2t6hiEg70GVtERERH6MzZxERER+jM2cREREfo+QsIiLiY5ScRUREfIySs4iIiI9RchYREfEx/x8MQ1MhCbaf3QAAAABJRU5ErkJggg==",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# perform partition\n",
    "noniid_labeldir_part = FMNISTPartitioner(trainset.targets, \n",
    "                                        num_clients=num_clients,\n",
    "                                        partition=\"noniid-labeldir\", \n",
    "                                        dir_alpha=0.5,\n",
    "                                        seed=seed)\n",
    "\n",
    "# generate partition report\n",
    "csv_file = \"../partition-reports/fmnist_noniid_labeldir_clients_10.csv\"\n",
    "partition_report(trainset.targets, noniid_labeldir_part.client_dict, \n",
    "                 class_num=num_classes, \n",
    "                 verbose=False, file=csv_file)\n",
    "\n",
    "noniid_labeldir_part_df = pd.read_csv(csv_file,header=1)\n",
    "noniid_labeldir_part_df = noniid_labeldir_part_df.set_index('client')\n",
    "for col in col_names:\n",
    "    noniid_labeldir_part_df[col] = (noniid_labeldir_part_df[col] * noniid_labeldir_part_df['Amount']).astype(int)\n",
    "\n",
    "# select first 10 clients for bar plot\n",
    "noniid_labeldir_part_df[col_names].plot.barh(stacked=True)  \n",
    "# plt.tight_layout()\n",
    "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "plt.xlabel('sample num')\n",
    "plt.savefig(f\"../imgs/fmnist_noniid_labeldir_clients_10.png\", \n",
    "            dpi=400, bbox_inches = 'tight')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Feature Distribution Skew\n",
    "### Noise-based"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [],
   "source": [
    "# this class is from NIID-bench official code: \n",
    "# https://github.com/Xtra-Computing/NIID-Bench/blob/main/utils.py\n",
    "class AddGaussianNoise(object):\n",
    "    def __init__(self, mean=0., std=1., net_id=None, total=0):\n",
    "        self.std = std\n",
    "        self.mean = mean\n",
    "        self.net_id = net_id\n",
    "        self.num = int(sqrt(total))\n",
    "        if self.num * self.num < total:\n",
    "            self.num = self.num + 1\n",
    "\n",
    "    def __call__(self, tensor):\n",
    "        if self.net_id is None:\n",
    "            return tensor + torch.randn(tensor.size()) * self.std + self.mean\n",
    "        else:\n",
    "            tmp = torch.randn(tensor.size())\n",
    "            filt = torch.zeros(tensor.size())\n",
    "            size = int(28 / self.num)\n",
    "            row = int(self.net_id / size)\n",
    "            col = self.net_id % size\n",
    "            for i in range(size):\n",
    "                for j in range(size):\n",
    "                    filt[:, row * size + i, col * size + j] = 1\n",
    "            tmp = tmp * filt\n",
    "            return tensor + tmp * self.std + self.mean\n",
    "\n",
    "    def __repr__(self):\n",
    "        return self.__class__.__name__ + '(mean={0}, std={1})'.format(self.mean, self.std)\n"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "<ipython-input-12-b4ad572f4d38>:16: MatplotlibDeprecationWarning: Passing non-integers as three-element position specification is deprecated since 3.3 and will be removed two minor releases later.\n",
      "  ax = fig.add_subplot(2, num_clients/2, cid + 1, xticks=[], yticks=[])\n"
     ]
    },
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAABDAAAAH5CAYAAAB3S87NAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuNCwgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy8QVMy6AAAACXBIWXMAAAsTAAALEwEAmpwYAACzcUlEQVR4nOz9eZyddX03/r+u6+znzMw5sy/ZJgkJIayyJAYo1B1RiqIot2Bp79alaFu961etbaHf3rWt2/3Dn0vb23qLC8W9IFVBUVkFZTGBQEhCkskyk2TWMzNnmbN+vn9Ycxs5r/eZmRC4wNfz8ejjUfKe61zb5/25rvNJnJfnnHMQEREREREREQkw/7k+ABERERERERGRZrSAISIiIiIiIiKBpwUMEREREREREQk8LWCIiIiIiIiISOBpAUNEREREREREAk8LGCIiIiIiIiISeFrAEBEREREREZHA0wKGiIiIiIiIiARe4BYwBgcHcccddwAATj75ZNx5553P7QEdZ78N5/iXf/mXuP7665/rw3iaDRs24PHHH3+uD+O4U0+98Kinnnvqqxce9dVzT331wqO+eu6pr154fuv7yj0HbrzxRnfWWWe5VCrl+vr63EUXXeTuuece55xzK1ascD/84Q+f8X02+9yJiQn3ute9ziWTSbd8+XJ34403PuPHEFQ33XST27Bhg0smk667u9tt2LDBfeYzn3H1ev2YP3t0dNQNDAy4QqFw5M8Weq2tn//Upz7lzjrrLBeNRt3VV1+9oG2/9rWvucsuu+yYzzEIgthTze7NC9nztafm5ubcf//v/90tX77ctbS0uDPOOMN973vfm9e2zr2wesq54PXVfO7PC9nzta+cc+7KK690fX19rrW11a1Zs8Z97nOfm/e26qtj1+xzm92fF7Lnc1/9yo4dO1wsFnNXXnnlvLdVXx27+X4uuz8vZM/nvrrwwgtdLBZzqVTKpVIpt3bt2nlv+2z11bO+gPGJT3zCdXd3u29961sul8u5crnsvvOd77j3ve99zrnnrsmuuOIK96Y3vcnNzs66e+65x7W1tbmtW7c+48cRNB//+MddT0+P+8Y3vuFmZmZcvV53jzzyiHvLW97i5ubmjvnzP/rRj7o//uM/PurPFnqtrZ//1re+5f7jP/7DvfOd72z4Jdnatlgsuvb2djcyMnLM5/lcCmpPNbs3L1TP557K5XLuuuuuc3v27HG1Ws3deuutrqWlxe3Zs2de+3qh9JRzweyr+dyfF6rnc18559zWrVuPHOe2bdtcb2+ve+ihh+a1rfrq2DX73Gb354Xq+d5Xv/KKV7zCnX/++U/7gqy+em776lfY/Xmher731YUXXmgu4gahr57VBYxsNutSqZT7+te/Tn/m15vhNxtjeHjYXXbZZa6rq8sNDg66T37yk0dt97GPfcydeuqprq2tzb3pTW9yxWLROefcVVdd5TzPc/F43KVSKfeRj3zkqH3mcjkXiUTc9u3bj/zZVVdd5T7wgQ/M+9ys/T/xxBPuwgsvdOl02q1fv97dcsstDc/XOef+6Z/+yQ0MDLiWlha3du1ad8cddzQ998XKZrMumUy6b37zm+bP/eM//qNbtWqVa2lpcSeddJL79re/fVQdgNu5c+eR/7766qvdX/3VXznnnHvJS17ivvzlLx+pLfRaz/fn/+qv/uppX5Lns+3LX/5yd8MNN5jnH2RB7alf1+jezId66rntqV859dRTj5zPb0NPOff86Ktf+fX7Mx/qq+e+r5588knX19fnvva1r817W/XVs9dXv3l/5kN99dz11U033eQuv/xyd9111x31BVl99X89l33F7s98qK+em76yFjCC0lfP6u/AuP/++zE3N4fXv/71C962Xq/jkksuwemnn47h4WH86Ec/wvXXX4/bb7/9yM98/etfx2233YY9e/bg0UcfxQ033AAA+PKXv4zly5fj1ltvRS6Xw/vf//6jPnvHjh0IhUJYu3btkT87/fTTj/rf8FxzzTW45pprzGNstP9KpYJLLrkEr3zlKzE6OopPfepTuPLKK7F9+/anbb99+3Z8+tOfxoMPPojZ2VncfvvtGBwcnNe5L8b999+PUqmESy+91Py51atX45577sH09DSuu+46XHXVVTh48OC89vHYY4/hxBNPPPLf87nWv26hP7/QbU866SRs2bJlXucSREHtqflQTwW/pw4fPowdO3bg5JNPnve2z/eeAp4/ffWb9wdQXwW5r6655hokk0msW7cO/f39uPjii+e9rfrq+PcVuz+/qqmvgtdXMzMzuPbaa/GJT3xiwdsC6qvj3VfW/QHUV0HtK+CXv2Ojq6sL55133lG/TyQoffWsLmBMTEygq6sL4XB4wds++OCDGBsbw7XXXotoNIpVq1bhbW97G7761a8e+Zk/+7M/w8DAADo6OnDJJZdg8+bN8/rsXC6HdDp91J+l02nMzs4e+e/Pfvaz+OxnP2t+TqP9P/DAA8jlcvjgBz+IaDSKl770pXjta1+Lm2666Wnbh0IhlEolPPHEE6hUKhgcHMTq1avnde6/Mjw8jPe///24+OKL8Z73vAf33HMPqtUqtm3bhg9/+MNH/ez4+PjT7se5556LTCaDRCKBu+++GwBw+eWXY2BgAL7v481vfjPWrFmDn//8580vLIBsNovW1tYj/z2fa/3rFvrzC922tbUV2Wy26WcFVVB7aj7UU8HuqUqlgiuvvBJXX3011q1bN+9tn+89BTw/+qrR/QHUV0Huq89+9rOYnZ3FPffcg8suuwyxWGze26qvjn9fsfvzq5r6Knh99Td/8zf4oz/6IyxbtmzB2wLqq+PdV9b9AdRXQe2rj3zkI9i9ezeGh4fx9re/HZdccgl27do17309G331rC5gdHZ2Ynx8HNVqdcHb7t27FyMjI8hkMkf+7x/+4R9w+PDhIz/T19d35P9PJpPI5XLz+uyWlhbMzMwc9WczMzNHDY75aLT/kZERLFu2DL7/fy/1ihUrMDw8/LTtTzjhBFx//fX427/9W/T09OCKK67AyMjIvM79V/7mb/4Gy5cvx1/8xV+gr68P733ve5FOp3HFFVcc9bd0QOP78dOf/hTZbBadnZ2o1+sAgC996Us444wzjux769atGB8fn9c1aW9vP2pQL/RaH8u9mc+2s7OzyGQyTT8rqILaU88U9dTTPRs9Va/X8da3vhXRaBSf/vSnF7Tt872ngOD3Fbs/86W+erpn61kVCoVw/vnn48CBA/jnf/7neW+rvnp2nleN7s98qa+e7nj21ebNm3HHHXfgve9974K3/RX11fHrq2b3Z77UV093vJ9XGzduRGtrK2KxGK6++mqcd955+N73vjfvfT0bffWsLmBs2rQJ8XgcN99884K3XbZsGVauXIlsNnvk/2ZnZ49c0GY8z6O1tWvXolqtYufOnUf+bMuWLU8blIsxMDCA/fv3HxmwALBv3z4sWbKk4c+/5S1vwb333ou9e/fC8zx84AMfWNC5f+5zn8O73/1uvOxlL8MHP/hBPPTQQ8jn89iyZQte97rXHfWzmzZtQiwWwy233EKPf+/evXjb296GT3/605iYmEA2m8Upp5wC59yRn0kmkygUCkf++9ChQ0f+/9NOOw07duw48t8LvdbHcm/ms+22bdtw+umnN/2soApqTx1P6qnj21POOfzRH/0RDh8+jG9961uIRCIL2tfzvaeAYPeVdX+Ohfrq2X1WVavVI3+jpb5q7tl+Xv36/TkW6qvj11d33nknhoaGsHz5cvT19eHjH/84vvWtb+HMM8+c977UV8evr5rdn2Ohvnp2n1ee5x05tqD01bO6gJFOp/F3f/d3eNe73oWbb74ZhUIBlUoF3//+95v+b303bNiAtrY2fOQjH0GxWEStVsPWrVvx4IMPzmvfvb292L17d8NaKpXCZZddhmuvvRb5fB733XcfbrnlFrz1rW9d8Dn+po0bNyKVSuGjH/0oKpUK7rzzTtx666244oornvaz27dvx49//GOUSiXE43EkEgmEQqEFnXsoFJr3sWUyGVx33XW45ppr8M1vfhO5XA71eh2bN29GPp8HAOTzeXieh+7ubgDAF77wBWzduvWozznjjDPw7//+76jVarjttttw1113HaldfPHFR/33Qq91s5+vVquYm5tDrVZDrVbD3NzckVXPZtuWSiU8/PDDeMUrXjHvaxY0Qe0pwL43x0I9dXx76k/+5E+wbds23HrrrUgkEgva9oXQU0Cw+8q6P8dCfXX8+mp0dBRf/epXkcvlUKvVcPvtt+Omm27CS1/60nntS311fPuq2f05Fuqr49dXb3/727Fr1y5s3rwZmzdvxjvf+U685jWvOfI7DNRXz21fNbs/x0J9dfz6KpvN4vbbbz/yzn7jjTfi7rvvxqte9ap57etZ66vj+itCia985SvurLPOcslk0vX29rqLL77Y3Xfffc655r8p94orrnC9vb0uk8m4jRs30p/9zd92e/PNN7tly5a5dDrtPvaxjz3tmCYmJtyll17qksmkW7Zs2dPyc9/xjne4d7zjHfScrP1v3brVXXDBBa6tre1pv2n217fbsmWLO+ecc1xLS4trb293r3nNa9zw8HDTcz9WX/nKV9w555zjEomE6+rqchs2bHD/+q//6kqlknPOuQ996EOuvb3ddXZ2uve+973uggsuOOq30z744INu/fr1rqWlxV111VXuiiuuOPKbcsfGxtySJUuellVsXeuLLrrIffjDH57Xz1933XUOwFH/d911181r269//evu9a9//TNyDZ9rQeypZvdGPRW8nhoaGnIAjsr/TqVS7itf+cq89vVC6inngtdX87k/6qvg9dXo6Ki74IILXDqddq2tre6UU05x//t//++jPkt99dz11Xzuj/oqeH31mxqlXKivntv3wF/X6P6or4LXV6Ojo+7ss892LS0tLp1Ou40bN7of/OAHR31WEPrKc+7X/r2KyHHwoQ99CD09PXjPe97zXB/KUTZu3IjPf/7zOOWUU57rQxFZEPWUyDNPfSXyzFNfiTzzftv7SgsYIiIiIiIiIhJ4z+rvwBARERERERERWQwtYIiIiIiIiIhI4GkBQ0REREREREQCL7yQH476cST8lsZFK2O7Vuc1v0k2t/EbOqxf3+H5fG3G1Wp8u5CxpnMsvy0kGuG1Kj8eOOPawbp2izzYepPtFpilflxZv77FuP9Nt7Vq5PyL9RzKbs7eJxH1E0iEWhsX68b9N2KdXLVi7tPzjOtj3mKjaJTMnvON87DOHwASMf65ZSOy1TrHxc5X1pAyzh8AvLAR0WX0pHl9jF61stuPF2fMZWwMFOuzKNcX3lfRUAKJUBs5EOuaGX3R5B4ibDxO63xbZ8z/nvXcsOZq8/7ac7yL8PPwqsa1M+dNY7MK71OzL6x7BcBV+BzoxaLGhot7NriysT/jmjZ9VFu30roGxpiLpB3Gx8eb7Pjpon4CiXDjvqon+Fj154znkTXfNmNcV2e8y3lzZf6Z1hxv9VWTmEVnfWzNGFchYx635gCrZp1j03dAo2b1h9Xncf4cN/vRPNZjeJe1xqSxXaSttsi+ivN3QGtcWedgXG8AZu/Y589LLmo8OyrG89M4D6uPAaAe4XW/bOzT6AHP2s56f7DuVZNfN1lL8GsXyhvzlfXeYeyzHuXHal03F7bvh3mfrXfZGD+PaKzUsK8WtICR8FuwqeVSsgf+8HK5PK15UeNFAvaLv6vyBvWTSVqrTc/QWqglxfdnDcBmX1BWLOHFyWleKxov78fyECJc2WgUYPENuoAM5aNY19X48mY+EGE/TM19kvN4oPCf5v4siVArNnVd3rBm9Y6fSdNa7fCouU8vkeA166FojTljIq1n+Rj3jZ6rW+MfAE5ewz9372Fas74Y1Y35wUvy6wZjPqrN5Ph2AELtGVpzxjWwro/1pclb5EOv6QKmtXBcLPLNWhu/vN0//R/2/ohEqA3n9v23BR+HF4/TWn1m1tyn39lOa1Yf1yaztBbu6+efOVeiNfMLujFOAaC2tJvWQhPGNbDmVOMltDbC+zTU1cE/0zpHALWD/HP9VctpzStZX7b5s6G6dz+thbt6aa3Z71G3/jLGugbWmBtf/pC5TyYRbsO5vVc0rOVP4+84qScO0Zoz5tumevlYrXby50p42z5aM3snwt9z651kwfS/WC/+/gyfk+pt/Jnjzxrzv7Gg5oz3da9kvwM649npGXOA1efeiauNzzQWeAvG+0GTvrKuAYzntWeMgbGee819MolQKzZlLmtcbOfveeYixEH7HRADfE7yZvjcYc3l5cEuWouMGN9zjDnO6mMAKPbyZ3ZqH7+P9Ti/j5HhSb5Doz9cG/kLfsD+y0gAufX82rX+nM9X9R7+3mH9hcPcErJgBiC+n9+rSo9xjrDvs1fk7yzl1T20Nj377YZ/rv8JiYiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCTwtYIiIiIiIiIhI4C0ohcTirN9cvMhI01/+gBGVav4mff7bV/0E/621VlrGxO+to7XCpfZv0v7Iad+itXNj/Dfetod4msqaO/+A1l63bgutpcP8N17/Qcb+7eT/MrmJ1h547zm0Fnlop/m5lJVeYsWIGr+BG4CdYGIk4zT7jfGL4+hvt/dbjd/4a/0mcSNlBLDjGe04QCPdpcLnACsVaOL31vPaq+wUkk9uvInWXhI30oaMNI0X3f+HtPaWtbw/pir8HP/f3p/SGgD8w9gGWrv/g7wWv3cbrXlmf/B75VlJTE1+Q73FTxu/pX+RqUlUyIdrJfcjx38zuZszfqu/lUADmL+d3BIyr4vxm8vb+XZjm/hv9K6+wfgN6wDeuebHtLY6ypME1kf4bx8/784/o7WXnWgdD089+WDf7cZ2wOcnz6W1+/8yQ2vJxw/yDzWjWe3kK6pZ0pIxPsw0iTb+W+YXLeTDtTTuq8SI8Rv/W/mcYqZ+NGM8jyP7J/hmXfw399cT/HhGX8y3m/ld/l4FAH971q20dmlqmNZm6zzZ42U/fyetvXLlEK399NBKWvv0ev6uCgB35fl78G1//ru0FrMSMxYZz1xv489cf9pI0gDgjPvsl41ePh4R5JEI3NLGqSBWPLEZa71yqblL30hbqqzg6T6RXXx+jDzJxzHSfD4aehN/XiU22LG0/8/a79Daq1MjtDZpfPe86IFraO0NazfT2nmtO2htWThLawBw7V6S8Alg6mMraC11H/9uVV3Pt4tv4ckmMObryHiBb4cmSUT9PFXMqyw8Tlv/AkNEREREREREAk8LGCIiIiIiIiISeFrAEBEREREREZHA0wKGiIiIiIiIiASeFjBEREREREREJPC0gCEiIiIiIiIigbegGFVXd6iXSg1rnhUtZEVhNmFGk4X4+kt9WR+tbbxhM631RHj04rLIz/iheHYEzC8Kg7S2s8SP9dKWrbT2J6fdTWtXpR+jtQj4vXr/yKtoDQCWxqdo7Y2f4bF2fUbE3v/zrbfS2gn/81Fas+Iem0XT1WaMiM0Uj+aiEUHHkqzlAFQbf27dOo88jzOqG1GRgB3d6Hdk+Oca8Uqv/wYfj3XHL9BglPeVD7uvtpcGaC1f53PH2sgorb1r/V20dlkLjy3tCPH9fegQj3QEgL4Y749XfOweWjslsZ/W3nM776uT/pFvZ0YQW7GeaBLBWuAxgzTW91j6ikSzei1GNDHpQwBwxtgH7Ihlz0j0q6xpHJ8HAJv+xY61Zl7S8h+0Nlqz4zXvnVlLa6U6j/Rr9flcde2G/6S1CxO7aW1vlc9TfzH0BloDgFPSPELvko//iNZaQvw8/unHl9DaiR98gtbqWd7ffiePlgNgj8kDRgStFRefsXdJ9+d7qCfJPBfm72OeEdno5e340boRF4wQnyAqPXycR/4nn/8v7nmY1tIh3sj1Jn8fuGOOv+d923g+rovx2MrfWb6L1q7v53PHzzvup7UvjZ9PawDgG++6F/wv/rm5Gn8+fvPBs2ntpE/y3vFqfM51VmwrAH/GiIP0jXtpxEQulvM9Gpca3s9jRF2Gj/HiUnueT+zmfRea5nPg9HmDtPaya++ltQtanqS1iMcjTQvGexwA/GhmPa3VjJ7sDvHvAH95+m209sYWHj/a4vM5969Hz6E1ALi4h39nq3yUP1v6wrw/3vfjNbR20ieM9yArnnvGjieu9WZozc8Z32dSC48h17/AEBEREREREZHA0wKGiIiIiIiIiASeFjBEREREREREJPC0gCEiIiIiIiIigacFDBEREREREREJPC1giIiIiIiIiEjgec7KfvsN6XA3NrVd2rDmana8HlXj8TkA4CUTtFafnqW1ZffyGJjz0jtp7bH8UlprCTeOkAWAQi1KawDge/wyH5zjMWHjczzq5sx2HoX46PQSWjuU4/FKfS38mgJA2Ig7spTrPNJqMMWj4DIRHnX1yO/y+Lmm47FiREUaEVqORGg9ULkNM/UJe59EOtyFTS2N+8ozIl3rM/xeeVF7PFqf64x41lU/4LU3djxIaz+YOcU8HiYZKpv18Qrvj5jP4862TPH+2NS5h9a25XgU3tA0H4/L23j8cDPVOh+PLRE+J/XG+PiYqfK4r/2X8PnBC9vRdC7PI7a8ON9nbSrb8M8fKH1/UX2Vjvbg3O43Ny4aEWFW5Het3Y5RDU0Z8WJGHPL67x6mtTNSPLJtc345rZWM+bYlxMcMAAwVOmmt6vhYnC7xZ/UpGR5purfA++bAbIbWEhFjDgfQHuNzVTzE54aDBf487k/y6L3BJB+nmy/i8wbSdtwhJrO0ZPWja+Fz/Hjbj/HQQwuP6E1HurGpvXF8rdXfVhQsjHc8AKi3Gc+qCO/Xrk/y96PzM/wdcLrG99ce5j2+r8T7BgB257toLVflEYL9CR6TOGa8H0ZD/F1trMi3W95iP6uGZnm/LjO2bTPen/PG+3PYiG0dfqvRV01iVFHi7xZW7K9L8Hs13nLHovqqrXUJzjn7XQ1rkeEs3c4zIl3zpxjXBkDy50O0Vl3D4+nj/8ifVxva+WdaUamWJ/P2efQbEfSbs/z73JIk3643xuf5hyb5czc7x+eyK1fw92MA2FnsoTXrmX3HyIm0Npjm3626YnwuG3oLv//1NJ8fAcCr8PvsjO9WnrEUMeF/t2Ff6V9giIiIiIiIiEjgaQFDRERERERERAJPCxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoHXJCj5NzgHVyb5yCGex+2FjHWSGM9/BgCw/QHY94Gzae11rbfQ2rYiz7j1PZ5FO1Ux8sEjPHMeACbKPHfbyseGEa0+VOC545koP56WDN9fLGTktQMo1fiQqTp+n/MVPj7uHl5Fa5nEHK3NvqWf1vq+/BitAYAX5eOuXuT79FONc569meOzFujKPKscRqZyPcczngHAK/ExsO/Pz6C1lyduo7Wf5E6itYjPs6F98J6L+bz/f1nn4/XgXButtUT4+R8u8+26ovy6pruKtJYI2ecxXeH54dNlPgnsm+2gtYdHltHaid2jtDb8306gtYF/eYTWALuvkOTn6JMMcG+czxumuoObI/e4yO8TYjFa8g7xawYAzth26BreG5fE+Vx1x9R6WlvfMkJr++f4uDhYStMaAAwmJ2jN6rddoS5a25rlz9yQX6e1gZZpWos3eVbNVHjfdMdztJYN83H65EQPre2bbae1wmW9tNb/H7tpDQBcO79f9ZHDtOZVjDmHT3E2PwSvlbzLGM9NxHlv1NIpc5ehyRla2/nOpbR2efuTtPbz2ZW01hbm5zFd5WMjHTbmFQAdxjuZ1XNbZ3jvWO95uQq/5t0JPv4PF1tpDQByJf65kxF+LwtV/mzYOdFNa61x/qzOvYr31ZJv7KI1AHAl/m7luvn8Cev7zCJ5NYfwBBk/Ef7OXTf6KjJtv3PUl/O5bPfr+Xedv+7l7wD3Ta+htZWJcVqbqvL9NXt3agnx8XHlwM9o7fHCElor1iK0dkHXU7S2s8Cv6X8eOpXWAGAgxZ91j03xOWB52xStPTrCt7to9TZa23dZH611bLefu62P8vekWgf/Howq/x7A6F9giIiIiIiIiEjgaQFDRERERERERAJPCxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwFhajCgCe1/jPjcguVzPWSYyYVHN/AC6//C5as+JQkz6PTyrV+SU5XOHxUlW3yLg/AGGPR0yGjPOIeDzOZrbK45XiRixR3oi6AoC64/djqsSjkKx4Vuscrf2lX8djBPFlXgIARHlMklfj94PGCJMYyHnxfCBBIv+saDorJq/ZLtn+AFz5335Ea0ujPO5tPL+C1pIh3nPjFR6ttC3H45wAYFWSR3NZ46rViFEdKfDYwt4Ej/TrixlxfzkerwUAk0bvWNHFbTE+Pqp1Pu/un+GRjz2X7Kc1/AsvNVPbd4AXvcbH6oxeNHkAfDJ3dPHIPq/Ar6fXw2NCAcBNz9Lama95gtYqjt/fdIRHM1pRqYeMCOGyMZ4AYGyO9+NgatLcljm3i0eF/uTwWlo7I8PHzFjZjnucmOORjlvGeYRezeibYok/H8MhHgfb/oZhWsP3+bMasMek9dSpL+cx44tWq8FNZRvXlhhz9f6DtBQy4iwBwLXzsfz6i+6ntQNl3h954/2obsTBT5V5jOrJbfwcATsS3Io2zlf4mGsJ8+dYX4LPR9Yzzhr/v6zzd7KnRvkc2ZPm0a2LfXsauGyIF7/L7xUAuL5OWqu28Gse3cvfOWDvkqvX4ZHY7/Iy/qx2xvej+C479hsh/p3l3y67idbyjl8bK2Y7HeaRv49M88j38zt4bCkATBsRrPfP8Ej4sL+4d4uOMB/HrWHjuVs3onkBdEX55w6Bbxs1zuPspfxd7kAhQ2un/B6PoJ7+E/tdFhU+Brw5o1bnz0+Qryv6FxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCbyFxah6HrwI2SRqxG9asZRNYvI8I+rHikO14jcjRmxpa4RHlllRV5W6HaMaMaJuijV+7awIxTmjFg3x/ZWNqNi5Go8XBYCoEZNkRaVa0Vz5Ao8084wozHP7h2ht9/JBWgMAt2svL/rGuh6L+jmWGNV6Ha7QOC7RbzOiAks8Qs3N8kgmwIiDBRDyeJzRSIVHerVH8rTWG56mtb1FHmfWF+fRpAAwU+W5ZWHjPCxRYxxb8XsH6vzaNGPNH0tS/NqNFXnkZbHC+7w1xufOkzM8DnD7iWtoDQDcbiMq1cCeK16Vz+Mm34fX0jhG040bUaBGvzkjevmXP8DH25rUGK1VjAhua65eEeeRxvvyPHbNigIGgMNFHgWXN55VM0bE5P3FlbQWMZ5VQwU+N5SbPHMTYT7HtUaN53yen3+lzKNZ/RR/BpzZwePsHus+hdYAwN+5jxdX8/hBb8cQ3+5Ec5dcJAz0No4h9orG84i9NwKo99jzpreHR9BaUdF1FqMMYLXRj9Z75ZbqUlq7ffgkWgOAC/t5HOThIp93UhF+PFbkcdboxxYjRnx4lr/nAsD6rsN827wRB1vmc4cVeT6a5ed4wYn8mt63/sW0BgAtWw/RWuQgnx/qRvzqovk+XLLxu4VX4c8VF+VzYD3N5yoA8Er8PeeR4iCtrY/zfnxl5jFa++7U6bRmRYE+nuOR1wAwlOPPOuv7nG+Muc4Yf5fdU+Ix7FaM7KntI7QGACXjWX9ShvfcrhkeXbxnlI/VnnYes3xihkfwHh6w48sTRT5flXv5mIxk+b1iOcv6FxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCbwFxai6eh31YuOoE59E1gGAq/K4GlflsTMAMHTDKlp7Q3gHra2O8hiYE1t4jNxeI5bxMSPOJ181YmQBZKKNYzIBoGTEwYWNeKE5IybLilG1oseasWL9LLkKvz6resdp7eQ0j3TcX+Txa8OvsKOu+p8aojUruhceiWZjfz4fngcv3Pi61rM8QtMzoov9RNzc5fANA0aVx4u9NPUkrcWNeOKxGh+rD/gn0JoVh9yM1ZODSR5BWXW8P6y4uyVJfq9mKvb9GGzh0Z518GtgxSwva+PHs7qFxwhahl9uRx4u+cweWvMzRjwfi/Vd7O33fLhY4/vv1Yx43Qp/HjU7lKHP84jFc8DnuNMTPNLZiqxL+jwK8alCD61Z0YuAHbNqxcRZvWFF1nXEeORzwejhwwX7PFa0TdGaNa8USnyfK3r5vHFCG+8p6/xHz7bPo/+QEe1rRIz67Rnzcxct1Hh+dMZ7hVvay2sROw536qt8LJ/TwmMb5xyPPX5tis9T987xY30wu4LWBtNGPDOAhyaW05oVQe+zDEHYMZEjOT7fxkM8YrgtbsQZAuiI8ohJK0Y1HubnWCzze/WSVTtp7WcTg7SWXW2/q7Zs5TUvzuPS3VNGrPFi44mdo7Gmfpm/V4Vn+TPAn+b3CQAK/8b7tVDnc+DGGJ9Xb8kP0tpZrfw594WhTbS2rp1/lwOAfuO9qzvKny09UR4juneOf38o1vhYLRox4weNeHIAyBvfkQZb+dxyVgcfjydl+Lv8dIW/k1vHOvR79pvQiZ/nnxt7mMces3huAABZXtC/wBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCTwtYIiIiIiIiIhI4C08E7PeONLJ5Qt0EyuSCCQ+8lf6Ps/jBwc/w2PLDlV5nNPvJniMXpcRP9of43E9T+WNCBgAo0Z0XdSISrUiFNuiPO5qrsqjfuJhHqGVq9iRZrkyv5cFIworX+Tbve30e2mt1efneA/W0trmF/P4JADw/48Rk9Uk2vcZ5xxcqXEclhczjrNcpjUrYhUA0jfwaL4XfXyI1g5V+Xbnxnks1doIXyu9y4jleijLo+cAIGmMZSuC+MBchtasqOCWCI8taxalbNk5zecPK/Lx8CSPu3rbWffQ2mSVz0f7Sh20Vt7I7zEA4J/5ffaMqG3MketaWOQae60KTDQeV7Ucj5fzk0n+mU2eVd2f53GPL/okj5AbKvN7/zvJXbS2NsKv560R/jzen8/QGgDkq3zOGTPGzUyJP6v7Ujya1WI9qyK+EYcL4HCBz1Ujk/z9IBzm88b53fx+rI4dprWHcitpLf+7dtyh+waPYPdIVDAAILK4yHNTtQocJpHAnTxi2TvE42e9Gr/eAIAb1/Datbx0uMLv8Zzj0aSnR3n04LfD/JnbjBWza0UaDk3z+TgdsyNPmbDRO5Wa/Q7481EeJXt4JENry5bxMXDuEh5re2KS91XdiDyfehm/pgBQ/4kx1/v8c2sD/H6gZGSzWpwDSB+Eh/l1c2k+H7uUff61z2Ro7ZX/v2/S2jdyPPb+6jb+nBur8Xen6WX8WKerxn1q4tHpJbRWSfFxfqCQoTXrOWe9q7U16dWE8ax7+BCPaO9u4fPum5c8RGuZEH/ubM7zHt/eymOmAZi9Uzl1Fa1FnuBjRzGqIiIiIiIiIvK8pQUMEREREREREQk8LWCIiIiIiIiISOBpAUNEREREREREAk8LGCIiIiIiIiISeFrAEBEREREREZHAW1DOlud78BMkQiZkRC85I+6sSYRW4mdP0drHT3sxreW/zSPtzj3py7T2hakNtHZR+lFa+2LpfFoDgFkjmq5c59cuHeHRO/kaj1BLGnFfY0aka6pJTNhkjUcapRP8WKdGeaTdd0ZPp7X9MzwiKPFvGVpb/aNttAYArm6MSWssHw++Dy9FcoJIvCoAGr0KAF6Tc2j58ZO09skLX0FrhRt4VO5n19xEa9/P8fikC1v4vcrVjAhmACUj8nTYiEq1ZEs80mtZKsv3V+CxffEQj8gCAN/jsX4hI/KObwXcMnYGre2c4NGdLV/k57Hydjsmjo5jAPVREr8IAB6JH6vZUZmUH4LX1njO8UkUOAB4aT5PuTyPswSA1KMjtPa5l7+Eb3cjjzyNeDzS+bPjg7R2SeYXtLYn30lrAJAK83nFcnLHQVrbn+fzeGuCR/NOlfjzJha2465LVT43DHTwSPS9B/n1GTHmlG8+dQatdf8ffh4nPM5jIgHAGZGfZjSxsd3ieYDf+Nni4vzZ4IH3lTdjR5533sf76oYrX0Nrbdfz8XhKYj+t/Xh6Pa29vP0JWvuOMd8CwGSJ3ysrurQjweeHQoW/A1rPjVyFP1eTEfsdcM6ItRxcwaNiD0/zMTCV4p/5jYkX0Vr8ej6v9O3i8aMAgGk+7qx4Yi9hvJPwUzS5kI96uvE18FI8thM13uOlAf6eDwDGowUf+sN30Fr8b3lflep8Doj5/B3ozW1baO0r2bNoDQDuGuMxy9Yzomh8f+pP8OfD8mTjeHYA2Ffg43FNyyitAcBYmd+vwzleOzCRobVvePzatRrfLQ99djWtrd5rvweFxnlkem0Jvz71lQP8Q+sPN/xj/QsMEREREREREQk8LWCIiIiIiIiISOBpAUNEREREREREAk8LGCIiIiIiIiISeFrAEBEREREREZHA0wKGiIiIiIiIiATegmJUXd2hTqIbPRaDB5ixlF6UR9n81055zYhgbbmSR7m8ffqltDbxH4O0tmndTlrLRHjUFQDUwa+PFWtqxStW63z9KWxEaEV8ft2s+FUAKJT4/XKOn+OK5TxCsXhRnta6o/x4XPkArXkxO37TjO/1jbHskWtujf9mPMALNf5cKwgv1MujgutZHgMFAB6LQwZQG+fxY/HL+P3/i9CraW38Rn6sL13PY1S7InbE3uM5Hr1kRcWdnOZRYGPF5bS22KjUdJRHVgHA4QLPXysbcZDLunmkV/6NfLv+OX7+rjbMa2U7DtYLGRGc1nMgSaJr5xa5xu57cPHGY9WKH3aHeESYt8yI+QIA49o4I5Yvdymf/76W5vHco/9//plLYnxcWM8UAJit8Llh7yyPQetO8POwnisHC220Zj3HuuNN5oaxPlqzrkFvN587D7ycj8fBNn7N4RvzccXuKYuL8B73qnZE/aKEfCDd+H3FK/J77OX4+5Er2e8cXoRHM/pFfu1m38mjoj9TupjW9v4Tj9E+cf0hWouH7Fjf9iifW56Y6qW1dIw/OzrivOfKRsR4qcZrhQq/3gCQneXXJxfmz9x6nb8j5V7Lr136BL4/P8vfVbxSk75K8nnO6itYtUXy6g5+oXEfVNt5xGxkv/Guto/HDwNAbf0grVWTfAxU38djpr9f2Ehrmc/xiN3zErto7VCZPx8AoDvBnwNjRf7dyooLH8rxc7y45zFa221sV2vy7wU2H15CawNt/PtsyejXyBv4dnNL+POxtZXP1161SbS9Ed8dMuZrP2e8O5IEav0LDBEREREREREJPC1giIiIiIiIiEjgaQFDRERERERERAJPCxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwFhRo7HkevDDZxMh+NYVCdr1mZJkb21rZ4n6C5z9Xa3xNJ+7zDNuZKs+qBoDWMM/ynvb58cRDfJ9zMLKa64tbm5oz8sEBIOTzDOBomGd5t0R5xm+1YuSnG/fYi/HMcbgmWcU+zyRH3RjLTYbrotQdHa/O6isjx9wrGZnKTYQ62mmtPpWlNWf0juVQjed8F+pRc9vWCO+riRIJjwYwW+XX7sT0KK1ly7zPC1V+rKUmfWXpSPBM7jr4OK6OjtNaqCPDd1gu8u2M7HAAqO4b5tt2dhgbsjlgkc8VB6DWeA7wjHPwyDYAgNm8uUvzerfxPHrP6DcYc2O5yTOHSYX5sxEApsu8N0Ievx/d8RytVd3i5oZZ41jKTd4drGd5W5LPGy1Rfn3o+08Trsw/03UbfQEAYX4e/tQs/9zpGf6ZTXbJP7RJjyxCfXDArPtl4/3AeD56xjug5cRuPv/3hbO0drjYan5uOsrn1XSMj8epOd7nq9P82QDjsnXE+Fw2YzzjAGDkIJ+vUh38c9MJfo6I8GenP22cozEnO+u7AwBYz8CQMV89w+MfAJzvoR5vfA3C2/bR7epLemnNM94PASA0bTznp4x3jiR/76618X3unu6kteFe/g7oG88cAKg74x3IeO4sj03S2lCOH+vm3HJaK1b5d7KIZ4/Htjh/Z++I8fsxbXyfdcv7ac2b498t/Tnju3WkyZegqnGej+7ktUya18irvP4FhoiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCTwtYIiIiIiIiIhI4GkBQ0REREREREQCb2GZYJ4HL9o46sfRGDyYUaiuWdyjFaMZ4Yfv5vjn1o3orY4Uj6sJgccnWVE+ANBmxKhOzvG4Ryuarlzn599pxO4cnuNxX9FQk+gpQ6FkR14ybcZ99Dx+Xc2x0yRizzNisszoUhaHt9gYYQAIheClG98TNzbBtzNq9aIRWQbAs65P0tgwwmOirGvaleRxZ6dH+Xn8aGa9cTB2T1pxkBvah2jteyMn09ry1ilaC/u8d6y4U8DunfY4jzsbzfN4zs6UcSOt8WqMjbo1HgGE+3msm/WMcHkyXq1IY0utBkyTiEnrWdXKr6er8NgxAAileRScGctn3As3y2MyT+3hz4ZV0TFa21Jfxo8FwOoWHgebr/AIPeu5Uq7xMdUSMZ7VRt8MJKZpDQB2R3gUXm6On8dMgc8bK4znOHwrepHPDZ7xrgIAGOdxf3Uj0tG3YukWyUVCqPRnGtbC43w8WrNfaNqOJ0bZ6Lsofx5ZfcXOAQAm5/h2cY8fy5o23nMA4BuR0L+YWEJrVnTxnhmeh3t65wit7csbUelN3mVjKR5Pa0Wl7jvIj/XEfiPy03gH9I3IRpfgPQ4AzuhXv8DPo5bm7+uL5VWqCB0k8y55NwSAappft8gIf1cBgLpxHl7FmK+s6OI5/mwdTPN5rOD4vWoPGzG6AGJJvk8rMvyOsXW0Fg/xPo/6fH/dCT4HVlyT+FHDTMWISjX6tZbi17W8lI+r5C4+dmop/o4EAH6b0R+9GV6b4e+5dF8L3kJERERERERE5FmmBQwRERERERERCTwtYIiIiIiIiIhI4GkBQ0REREREREQCTwsYIiIiIiIiIhJ4WsAQERERERERkcBbWIyqczy60og6Mj/SiBcD7PitOou0BGjcKwB4xj5PMKKwdpV7aC0WMqL5YEfoeEZMVsyI7MmWErQW9ni8WibKY4nmakYsGWAEgQG+z/c5luXRO21WpKdvjIA635+XMGK5ADgrms343OPBVSqoDR9qWAt18egxZ0SI+V6TtUlnXLu4ce2sWGNjDljX1vj8AODHxRW0dnDOjgJcksjSWirC54epKo8YXdrKP7MrxmOySkas8VTZyqYFUjF+rDsPd9NarcrvR7cRo1qb4DFZoV6+P1e0o66qwzy6L9TGY0a9FIneKi1ujd3VaqhnG8dsemEjttl4bsBvEs0cNeox/rkux+djz4jCrDsesTpb5z2cM6JQAcBP8Fn+4CyPXnvDyi209rPJQVpbkeTxenscj0LdMcOfxwBQrvL7HA3z52rVmDtdwbhXRqSnZ8RPu2k+pwCA18Kfnda7jDPejxbLK5UR3nGgcbGbP6tQ4s+byhJjOwDh0Rl+PEaMrBUTGTmYpbVlbTwq+lCV9+P2aXs89if5ecwUeb++cdVmWttV6KK1ovEu1x3nY856dwSAHVV+nqMzfKy2pvmzwyvxfiwt4dc8Pmt8ZpO+qi3j186fssac8X60sG9UR7hIBLVlja+rb8VLGjHjlQEelQsAoTyfH2op4/tTxYhuLvP7eFZ6L61NVPm4ift2fPlIiY+PndP8XWal0eeDCV6znmXLUvy9qlk88dg0vwZWDHk0xJ8BkaHDtBae5PurtfN3x/BhO77civ32+4050orEZp+34C1ERERERERERJ5lWsAQERERERERkcDTAoaIiIiIiIiIBJ4WMEREREREREQk8LSAISIiIiIiIiKBpwUMEREREREREQm8hYf+kBhFK0LRil4Ei2X91efGeOSbFSFmMuJaTmvZTWvjVR4D2BHJm7vM1fh5tMd4NFtPlEflDYV4xFwmwqOXJo1Ix0LViBEE0Jnix5ot8FjXStGIyKnwmKR6mcdE+VZUasWOtbUi71yen6M5lhfLOR4n7Pj5s5hIAAgt6bN3Ocsjxmpj4+a2dJ8dPLZrSSxLa4crPAbLihEGgIjH54COGO/JYo2P85kyH1cdRgSxZdqIPAaAiBGFFY/x/piZNeI5C0b8mhGja0alGhGkABCyYj9z/H74rK+M8W/xohGElvQ3LpaMeMmw0d9GbDEAuHYjJrbIn3Neio+NuhF3uyGzn9Z2FHn/n9jGo9UA4PFpct0A9LbyeWOoyJ9HlTq/rm3hOVrzjYjxJUk7zq1Q4b0xkePPwFLJiEO1njlG/LabM+5/0p4bnPF8tN6fvFYeebtofghea+P4PWc8c12SXzcrzvGX+zRibY3nuD/BozDrHfzapMI8Cvrns6tp7cwO3o8AsHOWRwiu7ODRgyEj1jRi1HbP8n6M+nwuyxt9AwAx43nUmuDj8fDBDK0tLY3y/T06RGu1ZXyeCx20I79D00bdGldGdCvs5FLOA1yo8Xeoegv/7hCe4XOnC9t/P11t4z0ZnjLO0fhYL8u/r6RD/DPnHL/ej80u4TsE4Bs9MJDizwgf/NlifV8r1fg7kBVdfEF6B60BwObMUlqr1PlFt753JVfyeS6yn0fFesaY84zYdwCoreTn4VnPyIjx7kU207/AEBEREREREZHA0wKGiIiIiIiIiASeFjBEREREREREJPC0gCEiIiIiIiIigacFDBEREREREREJPC1giIiIiIiIiEjgLSxG1TPiUn0eo2rF8nlRO7LJVXk0l2dE+jkrntWIcsmEeETMo6VltLY0yuPuAGBfcQWtRY0Ixbm6EedkxACV6vzahI0IrWS4SaSZIR/m99LL8+Px4kZkjxXbaIwNa9z88gf4tbOOh8bhLTLuEfjlOYa6SORZjF/TUFcHrbnJrL3TCL+ufpJHDFrxYlZU4JmJIVq7K7eO1l7avo0fC4D/GH0RrVWN6MZ1KR4lOVpqHBMI2HHJu/NdtNab5JF+ADBa5HFXrXF+XXOzPLbUmpOteGorRthrSfH9AajN8JjNULtxrPXF90/jA6nBzTSOdPMiRqSzNW2k+bgAAIzxZ4DrytCaN2NEcBvPqorj43tHjkc2vrzT7qmdfjettUT4WIwakccp47myPddLa63G/iZK9lhcrFrOiFGNGzGqIf73QZ7xfHB5O4IdRiS2FWnnCjxicfEcH5NN4vUYr7tJ9iR75wTgTRnzqhG/6g3z2M6+KP/MAyV+rNmK8dwEUHX8eKpGTGJLiN/HfXl+PP3GM2dZks9V22d4PwJAqcrfHRIRI/K3yu9jvYVfO8+I4PULfH5wbfZ8bUV+Wu9dLv/Mx6h6dQe/aFw7tt0kjwl1vfz9EADCs/zaFZfz95Hkniyt1bsztPbgzEpaOyl1kNYyETsO1/quY8Xet4d5bVeBv8tt6tqzqGP58dRJtAYAq9PjtDZV4v1x6FCG1sLG/GhFSdeSfPz7Rlw8APhzxndIY06uZoxnK2lV/QsMEREREREREQk8LWCIiIiIiIiISOBpAUNEREREREREAk8LGCIiIiIiIiISeFrAEBEREREREZHA0wKGiIiIiIiIiATewmJUnRFPaUVdGbGU8Ow1FJfjEWNemxF3ZkWs1niMaKvPI3tC4JF2AxE7RnV/7gxas+KurKg8K/K0I8qv22SZx89NNomm8z0eBxcx4mBd2IiRqxjZhUY0J4w4RDN+FYCzYk+tMcn2WeLjv6l6Ha7QeNx5RuyQFWnqwY50Mw9nKktrVj+GBnj8Wg38+uRqfH6IeHYcbt3xz13dMmZuy6QjPLbOOlarN46lr7oS/JoPp3jPeSljn2Ujss3xec4V7WjGUKcd3cZ4CRLbNbvINXbPo3GpzogmRatxzazIRgCeEaOJ2cVFTPrtGVpbEd1Ka/sT/D4kfWNOBdAe5c/AA3l+POUaf1ZZ8atntu2jtQeyPHpvtmK8V8B+HnW38p7aN2LEL4b5OVrxivUZPnZohPavGFGJVizdcVGtoT4+2bh2wnK6mT9pRFY26Y16u3E/rEg/Y47zjHdASyrEx3F7zD6PqXKC1npSPH76gewqWuuM83GcMfr4vsP8M8O+MT8C6Ejw88xVjNj3Wd47nnGvnPGe41sR1NZ8DJi9U28z3p8m7Hf9RanV4Gcbj4HCOv5eFWrnY8ov22M8PM2f5VZUKkYnaKm+ZimtvaZjC619e/xMWvv7Jd/jxwLgnbveRGsnp3k867Ycj6cemubPz9VJHndqPXNKTb6TjBR5zPx02YgYrRnxxHEjDvUAj5KOTvNx5SL2edRb+La1FO/l6D7yXAFoPLH+BYaIiIiIiIiIBJ4WMEREREREREQk8LSAISIiIiIiIiKBpwUMEREREREREQk8LWCIiIiIiIiISOBpAUNEREREREREAm9hMaoAEGocheQZMapWLCWNZf3VpkYEq7MiNo2YTC/GPzMT4hFRg3EenzNSITkv/yUV4ZGnVtyVxYpetCJfEyF+LKWaPSSs2K4JI7oz1GrFNhr3KsU/01nRW81i0owILVcyxpU1zhfJuTpckYyBNI+Jq09mac1L8igjAIBxfbyEEc0V47FMNF4PQMTj+1sS47Fkcc8YNwCiRmxVS5jfx4hvzztM0jf6OGLEKBpxrwBQrvOIuVkjQiuU4udRG+XzlZ/i97huRKX6LXYcLIzeqRf43Brq41Fxi1J3vKesiO04j/lyWSPOEkCor4dva8QPm7G1xjOuL8yP55TUMK2NV43oSQC7ZrporcOY/wcSPCo0W+HjbVu+n9ZenNlDa3eMraM1wH6WHcq20lpigEda1g/x6DlLyIjDhTGnAoDL876xZhUz1nexQiH4mcZxf7WwEUs5yed4r5/3DQB4JWOuNs7Rq/G+qi3hY7wr8hitFer8Xq2I8fkWAH5QPInWoj5/jq0yYhs3Z3lspQ/+XnVGJ58fnprl1wYAao5f82LZiHYfsCO46XbWe54RE8m+qxzZNsbnB3/WeCdv9gxcjFAI9fbGc1Jsgl+3WpyfQ7WF3wsAqEeNWNsq7x3rU0PT/LpZ4+biDt5z35w5zdgjcELrGK1Z713nZXbR2lnpvbQ2VeH3/8Bchtbmavb9sN7zrPkhkrLfkRm3pJvWao9u5xuevd783NAUf0fwC3aE+0LpX2CIiIiIiIiISOBpAUNEREREREREAk8LGCIiIiIiIiISeFrAEBEREREREZHA0wKGiIiIiIiIiASeFjBEREREREREJPC0gCEiIiIiIiIigcdDhBvxPXgks9wVjYznGs+wheNZ1QDgKjwD3G9r4dsZx+PKZVq7NfsiWuuPTtOalQ8O2Jn0NSOrOOLxaxfz+bWJGLnB+VKM1tJRI/8adrZ4yOO1aIxnFXthfm2s+1if45nCfoJnKgMAKsbxpJL8eIxM8sXy/BD81sYZ4AjzrG7fOk7j/ADASyT4tjOztFbPF4zP5Nf8J7M8O3pFjOfcV5w9RU3N8WvQkuZjp1Lnn2v1jiUT4ddmpNhmbls2jqcOPj+0tfJ9wufbweNr19ac60XsLHMk+f3wI8Y5TmUbF6xnhyUUgpdJNyw54zj80SlacyneMwDgpmd4Mcqvmxfmz45alj9zbhzfRGuJEO//fJXP/wAwkOL77Ijy8VY0cu7bIrwXre0eyy2htbrx3ASA5S38XsZCfIwPTXTQmrdqOd+h8S7jxrP8M5uNces95zCfO732xuP/eHEPP05r3inraK3UmzI/N7Z1P63VVvTSWniOv+f503wcP5pbxj/TeDY8XuBjFQAmC3z+OK1jmNZqxt8zdsT4eSxJZGlt52w3rUVD9nhMhvk7Yq7M57KpgvEOnOHPjfCYMa9WjWON2N8tPOP90c3k+HZGPy5atQr/8GTDUr2Xz0fRA423AYBad5P+r9ZpqZ40nldZ/n4In4/Vzx34HVp7Zc82Wlsf570BAPdOrqa15Sn+DFgWnaC170+dSmvVOn8n74/zsWr1HGA/dw8XyfcDANGY8b5mPFvKXXze9S48ndacZz93Q1N5o8jHR63LeEcmp6F/gSEiIiIiIiIigacFDBEREREREREJPC1giIiIiIiIiEjgaQFDRERERERERAJPCxgiIiIiIiIiEnhawBARERERERGRwFtYjKoDUGscvWPFS3pGhBxCPJIGaBKHacRvos4jgrw4j5EbjFuRjvxYa85eC7LiR1tCPM7JioorWVGQRvyqFfdoxYQBwFSZx11V6vwa+L4RMVflMUAW34ombDKunBH3tKixbEVWNuMcj/bNG7G2FR4TZ0VhNmXETMKKkTXuY1eER2/l67wfdxT7+P4ApGP8+oxXePTU0iiP10r4/Lr2RHlM1uNG5GNfwogeAzBe4pFW2Tkev+cZ0cW+EWlqjddwP48mbBZr6oxoutoUjwmjn2fM46Z6HY71jjFO60bEthUTDMCOBM9YEWH8HMMreKRjd3SI1maq/FjPadvDjwXAF/e+mNYSGd7/1rNj10wXrZ3WzmPyduX4dhUjzg6w48nH8jwKsV435vKDY7RkxSu6DJ+LkDOikAEjRBnGW4UdBYlOc5dcyIdraTyvhPv5XG28GiC+i19TAHBG74TyxjNw1ojzM1jvR9kKn1P74/b8FjHiSavGu+WkEU1aNnpgT57fZN94boRZZuF/yVX487pQ4seayPAoZX+Oz8nOiF6sLOcRo5ER+37UunhPhkvGuCrw81h0X3k+EGt87VyIzwBW9KRXMt7VAHgF/qxGiL+PuHa+z0oH748/WHIrrU1W+dz5k9mTaA0Awj5/flrfre6ZWUtrIaM/2qJ8Xon7/JpPlYz3sSb6E/y903qWeSV+bSIzxvfOCJ9XIiM8uhcAyst4E0T38u/XvhWJTE5R/wJDRERERERERAJPCxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoG3sBhVg9/CY3fM6L0m8ZNmpKUVFRkxoluN+FUrfjRX49F0hTqPjwKAVIRH1lgxQDGfn2NbxIhzWiQrJhUAZsr8GnQnebzQTIFv5xn3g8aLAvBS/Fhd0b42ZrRv3Yh8ZTGRxjbHxIh89OL8mrqKEaEHAD6PSfLCRjyhx/vVi/F4tcX2VTpsxMjCjhm2TNd4NOnBuTStDcYnaK1qRCnHYMfaVo2cwY4Ej/XbX8rwDzXmVnPslIx4rVl7XIU62nnNekaQ2GNv2o7KpMIhoCvTuHZwlG5mRWx71jMFoDF4AFC3PjfLI3brRvzm8hgfi8Mevw8/m15FawDQGuX3f3WSR15OVPj9nSnz80+G+ByfjvJ5fLZix9ruzHbTWn8rj6WrOyOaMM3vh8vy2EYvwecbWM8iAM6IH/aSxucac/WiVavAeOMYPdfFIy3NYzGilwHYsd7GnOsljTkux99VOsK8VjHiTncWe2gNALqSdlwuszZ1iNaeyA3QmhUj3B3l8/j+Ip87ACBtbDsa4ZGOIeM91yvx94N6hs8r0d1GBG/FjhENG/HFrjNDa54Vbb9YvgdHxqu/cz/frp+PuVramBsAuFZj/jTeZ6s9/B7HdvKxanlwZsWitgOA/bMZWhtI8LlzXeIgrT08O8i3a+Hb7SvzCNH+JH/mAECr8X1uaJZ/bkvMmD/D/B77s8Z3pCR/Xld7M3w7ALU4nyPr7UbUuBHdyvLC9S8wRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCTwtYIiIiIiIiIhI4GkBQ0REREREREQCTwsYIiIiIiIiIhJ4C4tRdY7HWjojetKIUbUiNAEAvrHGYsQEOiMiyU/zmDQrXtGKgrRqAJAM80inuM9rXREesTdW5pFus0Y0ZVuYx+e0hu1IMyvu0Yq1y6SM6CkSoQjYsYZmPK/xmQCAiBF7a8RImuNxsTwPHouKCxn7s6Lpmh1nhUcXujq/drWJxhF6ABBeyaOwrLhTK4J4qmLH+kZ9PgasmMkQeKRbT5xHPc05Pl+tSfJ4TmteAYBoiJ/H4Vne58kYv49WXLSb43OAy/O5M9Se4fsDUDfiCRcVl2w8V0yVKo9LNecbPofVDvP7CwCh7i5a842oSFfi99A3etyKH96V5xGia1L2eVSMaMqHsstpbWkyS2tWxPbIXIbWBhO8h6dK9txQqfH7vGeSR35GwzzyuLrXiDQ0hIy4Q69kxz3WC8a7jBUxejyivUMhoCPTsGTG2ht93Cya2bfeEa19GuqD/bT2VJFf70yY1w7N8fdKAFjeMkVrZ7UM0dqTRX6sFeNZvTrFI0bbjajYwyX7PPJV/rz2PSN+03h39Cp8frTiHl2bEc3dbGzU+TuA27WX1jxjnl+0Wh3edOM+qJy8km4WOcjHFHx7fgxn+Tt5NW3Eb5aN9+4wH49jVf4ec2bbPlrbXeTPMgDY2MPvVb7Kvz+sifHI111zfL5eHeXPz3HjHAtG3wDAkkSW1spGn3cn+PyZKxnfA4z47lDWmJObxF7XV/fRWmE5n1tSu4yxTF6f9S8wRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCTwtYIiIiIiIiIhI4GkBQ0REREREREQCTwsYIiIiIiIiIhJ4C4tRBXg8oxFp6ceMKEwrBgywo5CMeC0/ySOEXCuv1Y0IudEKj1e0YiIBwPd4ZNN0dXHRrWEjQrLDiMmy9les8WgdACjXjWsOHqHVmeDxY5Xq4qLQrBgsr0mMqpvl8bRelMcd0ShIK9K0Gd+j8Y1WxJxn9VUznhFp1sajoEJGP9Zb+biac3xcWeMx5ttjw4qeejS3lNZOSY0sap9Jn0dejhqxllacVzMhI5quJWrEc07P0JoVT+wbUamuSYSWGYvdyT/XmyXz1dwi19g9j0YlWxGyVu+HlvA4w19+Lr82i5pTALgWqzfs+E3Gii0GgGyZPx8zUT6PZyv8WK0IxYF4ltZaQ/xeNTNd5P1oRaV2JY0Y4R4e6ecl+P6sQFNnRWUD8NvbedGIw0Z3p/m5i1KtAeMk7i5mjPEIn//dCTyaFwBcgfdVPc3HqredxyuiJ0NLHRH+7lRx/L0iHrL70Xq3suIXkyF+jxPGPq2I1cdzS2itmYk5Hl1aKBv32XpHLvPzKA3ycRz7xW7+mf12/KY3xe8zWvn9QGVx8659MKARpKG8Mf7b+Pj3c8bcAKDUy7/PhEr8u0Vk10Fam3g5j3wt1Z+ktRZjnu+J8nd1AKgZ39lmK3xOtlhxwBM1ft0s8bA9bh7LDtBa1PiuN1bkx5MsGu9reR6j61L8WV7vs58rkVHrfhl9VePf5xj9CwwRERERERERCTwtYIiIiIiIiIhI4GkBQ0REREREREQCTwsYIiIiIiIiIhJ4WsAQERERERERkcDTAoaIiIiIiIiIBN7CYlQ9wCNxkc6IrXRlHufTLHzSGfGsXsiILXN8n5U+I7LKiElsD/N4tVzNjkm04q6sqNS5Oo+lsuIeeyPTtGbFDsVCdmxl0riuUzUe6dQW4TFJE0YcKo3thR0FWc8ZEVmwo33N8Wrsc9Ec4EiEkBnNZ8VBGpF2v/wBY+3SiEq1rk21nUcvWfFzeaN3eqM8ChQAxuZ4L1vRxTVj5gmBb2fFLFtzx5RxLIAdQWxFNId9/rlmaJc1/o1+dCU7RtWKE6ZRqQBcgUR6WXODpV6HKzSer30jJhhRI0baiPoDjHMAgDTfp2fEmZWNZ9V4hdc6ovxaW88bAOiM8W3DxjjujfFerRqRjpZxI7r8RZn95rZ1o8eHpng06fIWEhMKYCTZxXdoRb5btSaR30jza+Dl+DuJI7GMxyQSBnoax+hZcbDeFB8bLmq/hnoV4x3QqPmZNK0VOvj8d0L8MK0dKHfQWj1mv81unuKx3nXHa6/sfJzWrAjytYlDtLavyM9j3IhJBYB8mb9bREL8fixp42OgFuafGS7weddL8XdOWBGSAGpGHKS/j0eFsrjTY+EqVdQOjTY+ljk+jl0/n4+8ET6OAcB6Q6x28nHlqnwus5K9V0THae2B3GpaWx0f4x8K4JFZHsNsRQnvLPXRmhV5vLXIezUZ4mOuL26/y+6d4c+kiPGel4zw906X5N8fvDm+XXkpP5bwrN1XLsnn1sgh/r202t3GP5TsUv8CQ0REREREREQCTwsYIiIiIiIiIhJ4WsAQERERERERkcDTAoaIiIiIiIiIBJ4WMEREREREREQk8LSAISIiIiIiIiKBt7AYVXiAT6KiajwG0IrCbGqR25pxj3EerZMO8Qi5fSUjQsuIOgTsGLlSnd8G31tcvKIVv5o24mBbwzyaEwBqxj6tKMiycf6uzI/Hii11RSNGNGrHiDpnjFdrOxaHt8jPO7ItiaaqkyhIwD5Hz4qDBICQMV6Nc7H2WU3wcRwyxoYVlTpU5FFnANAf47FMVrTxdJXHr1k9l/R5hNSKKI/7sqKLAWB3jseh9aXs+C2mmjCi0IyYYa+Fx+hZsdYA4IWNR0rdGFcs9rfQLGib8D0eQWzFVhrH2KzH/TSPAbOiaRHh12yug/exFZVdqPM+zVaM6EEApRo/nsEWHs03UuJxf+tbeSzhyhjvm8cLS2jNem4CQDLM3wHa4ryPDxaN+2hFhRZ5vKBnXFMYcXYA7GhfK7Z4xogS51PDollxwK6Dj41mUcneJB/nXtI4EeNezS7j1/SxPI9J3Fvg74DnZPbyYwGwsXOI1lpD/F3mvuk1tHZSivfV5jyPlzyzbR+tfb94Mq0BwIYefp73H1pJa73xWVobLvJnTvjABK25ohFdnbOfVSFjPq8v6eEbFpv062IkYsC6ExqWvEn+/PfGsrTmeo3IZ8B8B6yk+HwVyfD5sZLin9kRytHavjyP7Tw0Z8RrAkiF+P2wviN1hPnxnJjkEcRDc/y6WhHMO/I8thUAzuo6QGvjZd4fL87sprUf1s6gtcpS/m5djxrPuZLdVwgb21aNbRfxqqd/gSEiIiIiIiIigacFDBEREREREREJPC1giIiIiIiIiEjgaQFDRERERERERAJPCxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnh2k/pucgytXGpa8RJxuVp/hmetWjjkAeEkjs77Kc9f9Fp6bW06HzH0yVqZwzOfHAgDTFX59EqHG1xQAZqt8u6ixz4OVDK0lfZ6bXKxFaQ0AQh7Pzi7X+XV9apJnJ/dGeJa3Z2S5uxrPFPaiPOcdAB3Hv9yWXwNXJtfOyBRvygPNrPet8W9cG9Tq5i7dLM/ARiy2qFqxi9//3sg0re0rddDa8sQkPxYAu/LdtNYRzdNa3Of3v8Pn2+0p8f1N1vics7Ng5MoDSIZ5T+Yq/JpPFvn46MAErXmRhU39R7ZrMl+bKvwcEVrcnEzVHVxxrmHJS/Fr5qZnaM1L23n0Zs/5Rq+W+PxXi/HrnQkVaK0jzMfweKmFHwuAQpXPf7sKfB63xmnGmONHjGdVOsy3u2N0Ha0BgA8+J8fC/Nm5P8uPZ2l+iu/Q6g2rZrzHAACMZ5mr8zHnPdM9BQC1Orw8uSdhY3/GcTZ7B0TMeB7H+LXxZngPhIt8bJzTsofWWsL8XXa6mqA1APjJoTW0dm4P32fK2OfPpwdpzXo/tKSMZxEA7Jjhz7LOJL/m9+5bRWsru/g+rTerem+G1vy9h4wtAVT49fEK/JrT8Q8ArfYu6WfWHfxy4+NxxrPapfk7h59r/Pw7IsHn63CRv1vXnuJj1Tuvj9bafH48p6ZHaG1PoZPWAGBt6jCtjZb5Dbl7mj8/OqP8/bji+DyXrRnv6034Hp8jD8xmaO3buRfRWmud30e/wmuRrDFf7x3mNQDe8gFaq3Wn+T5HjGcr+Yqgf4EhIiIiIiIiIoGnBQwRERERERERCTwtYIiIiIiIiIhI4GkBQ0REREREREQCTwsYIiIiIiIiIhJ4WsAQERERERERkcBbUJaeq9dRLzaOEAoZMaq+UbOiMAEAJSOC1YgXqud4nFM1vrhout9p20Fr58Z5lA8APNHG43wyvhGjB36scc+IyDHCp0pGDNDpCTsqsCPE44W+Ej6X1jYu301rNw5cwHc4akRBJnlsGYtQPLKtFSNZ59eORqyWjyFe0oFH6UWMWFsjIgl+k+Ox4ves2DojLraS5PvsNMbNi1t20dprUwdpDQCeauP7zNb5+BgIz9LaISMOdV0bn1fKxrU5nNpGa4Ddy1+a2kRr5y3lc9K/pl5Ca65kROUZc7JrEs/rGxHEXosR38munbfINXbPo73q5oyIPOMYrTg7AEDMONZpPt7MmMAwH99lYx5PG8+xv+6/zdgjMFbn8XpPlvppbUmEx6CdaMQob6/waLWa49e0dwn/TMB+lj+UX0lryR7eG/em1vMdThvR1Ebk9TE8Ocz4eismctFqNdQnG99nv4/Ha3pF3nO+8bwFmsRIRozo1jTv5WqCX/W+sDFWwcf/Ozt/yo8FwOr4KK0NRsdobaLGzyPexuPArfOYrfNx80R8Ka018+2RM2jt3SffSWv/GTqP1vwZ3sf+IaPnennkMwDAGJOuhb871NuN51iTrzNUtQocajwGvKQRzWm8q1X6M+Yu/Tk+dqKH+PPKW7mC1gr9vK92Vfj88OrWR2ktnTa+AwL4ceFEWntT1y9orWLMvEmPz0n/meP7OzMxRGtnxXkNAFp9/ty5JXoGrSVD/Pp8Y8NFtJa5/wA/mAofG24ZnwMBoB7l87U/xKONayt6jQ8ln2ceiYiIiIiIiIhIAGgBQ0REREREREQCTwsYIiIiIiIiIhJ4WsAQERERERERkcDTAoaIiIiIiIiIBJ4WMEREREREREQk8Dxn5SL+hnSoCy9OvrbxBxnxec6KQg0ZMVhNeB6Pwalb+zS4F/GInOkTeJxRocdeC6oZaWe1OL8FVZ7mhHrMiDRc5NJUKG9vmDjMr3l0lp9H6z4eyxP/6Xa+QyPuk0Yvonk8r2eNO2NcMQ8U/hPTtfEFbwcAab8TL45f3PhQjL6CFaFX5tcbgBnrByMq02vhEaP1LI9tq555Aq1NreHnUUnZ96Jm9MdcFz8PI50RLsbHlT9nzDlGyma4aJ9HZJrXfeNWdjzJoxITtz3CP7OVxzp7aV6DEUEK2DG7FjaX/3T865gu8/hBJh3vw6blv994X1YUrBG/3OzcrOeRta2X4s8VN8V7qnw6jwLNruZRqKVOeyxa47ge4bVq0niOdRmDuGI1Iy9FJ+x3h9gUP88QTy5Hx3Y+xmMHebwgqvyZ4+X5Dl3KmMRgR5Ba83htmEfWTZ66HQ899JC530bS8X5sGry6Yc08Tqt3osagAuBivO6MyD7rOe5CvDazhs9/dWPIzayy3508I9W23G68yxjtWuvkfeXP8GtTT/Cxmthv3w/fOA/rWdU2xPeZ/sVhvmGB9069r5Mfy1iWfyYAGPG89TR/z7FiXcfa71xkX/Vh04rGfVXt4uPRGsehov0OWEvw+xye4c9Br2LErBv9mF/Jz2N6Jd9urrNJzLIxBVi9Y70DesYrQvsp/D1/bDjDN6zZz13reRaZ5dumRvj16frxXlpzCf6OYH4HOtzke44RszrXzyOIo1N8zE26/2zYV/oXGCIiIiIiIiISeFrAEBEREREREZHA0wKGiIiIiIiIiASeFjBEREREREREJPC0gCEiIiIiIiIigacFDBEREREREREJvAXFqHZ1dWFwcPA4Ho7I89PQ0BDGxxcXo6q+EmlssX2lnhLh1Fcizzz1lcgzj/XVghYwRERERERERESeC/qfkIiIiIiIiIhI4GkBQ0REREREREQCTwsYIiIiIiIiIhJ4WsAQERERERERkcDTAoaIiIiIiIiIBJ4WMEREREREREQk8LSAISIiIiIiIiKBpwUMEREREREREQk8LWCIiIiIiIiISOBpAUNEREREREREAk8LGCIiIiIiIiISeFrAEBEREREREZHA0wKGiIiIiIiIiASeFjBEREREREREJPC0gCEiIiIiIiIigacFDBEREREREREJPC1giIiIiIiIiEjgaQFDRERERERERAJPCxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCTwtYIiIiIiIiIhI4GkBQ0REREREREQCTwsYIiIiIiIiIhJ4WsAQERERERERkcDTAoaIiIiIiIiIBJ4WMEREREREREQk8LSAISIiIiIiIiKBpwUMEREREREREQk8LWCIiIiIiIiISOBpAUNEREREREREAk8LGCIiIiIiIiISeFrAEBEREREREZHA0wKGiIiIiIiIiASeFjBEREREREREJPC0gCEiIiIiIiIigacFDBEREREREREJPC1giIiIiIiIiEjgaQFDRERERERERAJPCxgiIiIiIiIiEnhawBARERERERGRwNMChoiIiIiIiIgEnhYwRERERERERCTwtIAhIiIiIiIiIoGnBQwRERERERERCTwtYIiIiIiIiIhI4GkBQ0REREREREQCTwsYIiIiIiIiIhJ4WsAQERERERERkcDTAoaIiIiIiIiIBJ4WMEREREREREQk8AK3gDE4OIg77rgDAHDyySfjzjvvfG4P6Dj7bTjHv/zLv8T111//XB/G02zYsAGPP/74c30Yx5166oVHPfXcU1+98Kivnnvqqxce9dVzT331wvNb31fuOXDjjTe6s846y6VSKdfX1+cuuugid8899zjnnFuxYoX74Q9/+Izvs9nnXnjhhS4Wi7lUKuVSqZRbu3btM34MQXXTTTe5DRs2uGQy6bq7u92GDRvcZz7zGVev14/5s0dHR93AwIArFApH/mxiYsK97nWvc8lk0i1fvtzdeOONdPv5/OxNN93k1q1b55LJpFu1apW7++6757Xt1772NXfZZZcd8zkGQRB7yjl+b17ogtxTzX7+V3Pgr/7P93337ne/e17bvpB6yrlg9lWz+/NC9nzuqz179rhXv/rVLpPJuN7eXveud73LVSqVeW2rvjp2zT632f15IXs+99UTTzzhXvKSl7i2tja3evVq9+1vf3ve26qvjl2zz212f17Ins991eyzgtBXz/oCxic+8QnX3d3tvvWtb7lcLufK5bL7zne+4973vvc5557bBYzPfe5zz/h+g+7jH/+46+npcd/4xjfczMyMq9fr7pFHHnFvectb3Nzc3DF//kc/+lH3x3/8x0f92RVXXOHe9KY3udnZWXfPPfe4trY2t3Xr1obbN/vZH/zgB2758uXu/vvvd7VazR04cMAdOHBgXtsWi0XX3t7uRkZGjvk8n0tB7Snr3ryQBb2nFvLzuVzOpVIpd9ddd81r2xdKTzkX3L76dY3uzwvV872vXv3qV7urr77aFYtFd/DgQXfKKae4T37yk/PaVn117Jp9brP780L1fO6rSqXi1qxZ4z7xiU+4arXqfvSjH7lkMum2b98+r32pr46d9bnzuT8vVM/nvprPZwWhr57VBYxsNutSqZT7+te/Tn/m15vhNxtjeHjYXXbZZa6rq8sNDg4e9XBZsWKF+9jHPuZOPfVU19bW5t70pje5YrHonHPuqquucp7nuXg87lKplPvIRz7ytP0eywKGtW/nfrkCeeGFF7p0Ou3Wr1/vbrnllobn+0//9E9uYGDAtbS0uLVr17o77rhjXue+WNls1iWTSffNb37T/Ll//Md/dKtWrXItLS3upJNOOmoFFYDbuXPnkf+++uqr3V/91V8d+e+XvOQl7stf/vKR/87lci4SiRw1gV111VXuAx/4wNP2O5+f3bRpk/u3f/u3RW3rnHMvf/nL3Q033GCef5AFuafYvZkva//z7SnneF8Ftaecs/vqWHpqoT9/ww03uJUrVx75G4P5bPt87ynngt1Xv+437898qK+em75at26d++53v3uk9r73vc+9/e1vn/e+1FfHt6+s+zMf6qtnv68ee+wxl0qljpr/XvGKV7i//uu/nve+1FfHr6+a3Z/5UF89+33V7LOC0lfP6u/AuP/++zE3N4fXv/71C962Xq/jkksuwemnn47h4WH86Ec/wvXXX4/bb7/9yM98/etfx2233YY9e/bg0UcfxQ033AAA+PKXv4zly5fj1ltvRS6Xw/vf//6G+/jLv/xLdHV14bzzzjvqfzt1zTXX4JprrjGPj+27UqngkksuwStf+UqMjo7i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",
      "text/plain": [
       "<Figure size 1080x720 with 10 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "noise = 0.1\n",
    "num_clients = 10\n",
    "img_idx = 17\n",
    "\n",
    "fig = plt.figure(figsize=(15, 10))\n",
    "\n",
    "for cid in range(num_clients):\n",
    "    if cid == num_clients - 1:\n",
    "        noise_level = 0\n",
    "    else:\n",
    "        noise_level = noise / num_clients * (cid + 1)  # a little different from original NIID-bench\n",
    "    transform = transforms.Compose([transforms.ToTensor(),\n",
    "                                    AddGaussianNoise(0., noise_level)])\n",
    "    trainset_feature_skew = FashionMNIST(root=root, train=True, download=True, \n",
    "                                         transform=transform)\n",
    "    ax = fig.add_subplot(2, num_clients/2, cid + 1, xticks=[], yticks=[])\n",
    "    ax.imshow(np.squeeze(trainset_feature_skew[img_idx][0]), cmap='viridis')\n",
    "    ax.set_title(f\"Client {cid}: noise$\\sim$Gau({noise_level:.3f})\")\n",
    "    ax.patch.set_facecolor('white')\n",
    "    fig.tight_layout()\n",
    "    \n",
    "fig.savefig(\"../imgs/fmnist_feature_skew_vis.png\", dpi=400, bbox_inches = 'tight')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "We also provide demo of \"feature distribution kew\"-\"noise-based\" FedAvg on FMNIST: [feature-skew-fedavg](../../feature-skew-fedavg/).\n",
    "\n",
    "- Top-1 accuracy for FMNIST in paper: $89.1\\% \\pm 0.3\\%$.\n",
    "- Top-1 accuracy for FMNIST in this demo: $89.37\\% \\pm 0.14 \\%$ (5 runs).\n",
    "\n",
    "For more details, please check [demo README.md](../../feature-skew-fedavg/README.md)."
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Synthetic\n",
    "\n",
    "FMNIST does not support \"feature distribution skew\"-\"synthetic\" partition.\n",
    "\n",
    "### Real\n",
    "\n",
    "FMNIST does not support \"feature distribution skew\"-\"real\" partition.\n",
    "\n",
    "## Quantity Skew (Dirichlet)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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oqamJi699NIem5jhxNerl156aYd3D7ySnBMTEzly5Ai5ubmutrKyMtasWdPumKSkJBYsWIBhGABUVFScdh6TyURzc7NbsQUHB7viWLVqFeHhuioWETmbenJibnW6c+CV5Ozn50dBQQElJSWEhYVhNpvJyMjocPFVeno6zc3NWK1WLBYL6enpp53H4XBgtVrdWhCWm5vLww8/TExMDI8//rjre2UREemZMjIyXF+pdoX333+fiIgIhgwZQnZ2tkfH8DNaL1WlXXa7nfLy8u4OQ0TknHKq352ff/656ytLwLX7Ylepyb7Z7TEZGRn069ePRx555IznP3bsGEOHDqWkpISQkBDi4+N54403iIqKOqnvv5+L79MOYSIi0qO88sorWK1WYmJi+MUvftHmvdzcXOLj44mJiWHSpEkcPnwYgLfeeguLxUJMTAyjR48GYPPmzYwYMQKbzYbVamXr1q2sW7eOIUOGMHjwYHr37k1qaqrr0WB3KDmLiEiPsXnzZjIzM1m1ahUbNmzghRdeaPN+SkoKZWVlbNiwgcjISF566SUAnnnmGf7+97+zYcMGioqKAPjzn//Mr3/9a5xOJ+Xl5YSEhLBjx442TxO1trlLyVlERHqMVatWccstt3DZZZcBcMkll7R5v7KyklGjRhEdHc3rr7/O5s2bAbjuuuuYOnUqubm5HDt2DIBrr72WrKwsnn32WbZv307fvn051TfFniyAU3IWEZEewzCMDpPl1KlTWbhwIZs2beKpp55yPe705z//mTlz5lBXV4fNZmPv3r1MnjyZoqIi+vbtS1JSEqtWrSIkJIS6ujrX8err6z3aiVLJWUREeowxY8bw5ptvsnfvXgC+/fbbNu8fPHiQoKAgmpubef31113t1dXVjBw5kmeeeYbLLruMuro6tm3bxuDBg5kxYwYTJ05k48aNxMfHs3XrVr788kuOHj3K0qVLmThxottx+swOYSIiIt5mNpv57W9/y/XXX4+/vz+xsbGEhoa63v/v//5vRo4cydVXX010dDQHDx4EYObMmWzduhXDMBgzZgwxMTFkZ2fz2muvYTKZuPLKK3nyySfp1asXCxcuJCkpiWPHjjFt2jTMZrPbcepRqk7Qo1QiIu7rzKNUPZkepRIRETmHKDmLiIj4GCVnERERH6MFYZ2wacd3bbaYq+kzuc370YOucv385ty2FbNW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",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# perform partition\n",
    "unbalance_part = FMNISTPartitioner(trainset.targets, \n",
    "                                  num_clients=num_clients,\n",
    "                                  partition=\"unbalance\", \n",
    "                                  dir_alpha=0.5,\n",
    "                                  seed=seed)\n",
    "\n",
    "# generate partition report\n",
    "csv_file = \"../partition-reports/fmnist_unbalance_clients_10.csv\"\n",
    "partition_report(trainset.targets, unbalance_part.client_dict, \n",
    "                 class_num=num_classes, \n",
    "                 verbose=False, file=csv_file)\n",
    "\n",
    "unbalance_part_df = pd.read_csv(csv_file,header=1)\n",
    "unbalance_part_df = unbalance_part_df.set_index('client')\n",
    "for col in col_names:\n",
    "    unbalance_part_df[col] = (unbalance_part_df[col] * unbalance_part_df['Amount']).astype(int)\n",
    "\n",
    "# select first 10 clients for bar plot\n",
    "unbalance_part_df[col_names].plot.barh(stacked=True)  \n",
    "# plt.tight_layout()\n",
    "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "plt.xlabel('sample num')\n",
    "plt.savefig(f\"../imgs/fmnist_unbalance_clients_10.png\", \n",
    "            dpi=400, bbox_inches = 'tight')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## IID"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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APfee68WhImIXEB1dXVcc801nbYww6mvV6+55ppWnx64pTjHx8dTX19Pbm6u41hJSQlr165tcUxCQgLz5s3DMAwAysrKzhnHZDLR0NDgVG4BAQGOPFavXk1IiO6KRUQupM5cmJuc63fgluLs4+PD8uXLKSoqIjg4GLPZTEZGRquLr9LT02loaMBqtWKxWEhPTz9nnNTUVKxWq1MLwnJzc3nyySeJjIzk2WefdXyvLCIinVNGRobjK9X28OGHHxIaGsrNN99Mdna2S9fwMZpuVaVFMTExlJaWejoNEZEO5Wx/d3755ZeOryyBdt99sSr7bqfHZGRk0L17d5566qnzjn/ixAn69etHUVERgYGBxMbG8s477xAeHn7Guf/6uziddggTEZFO5Y033sBqtRIZGcnPf/7zZp/l5uYSGxtLZGQkY8aM4ejRowC8++67WCwWIiMjGTJkCABbt25l4MCB2Gw2rFYr27dvZ/369dx888307duXSy+9lHHjxjleDXaGirOIiHQaW7duJTMzk9WrV7Np0yZeffXVZp8nJSVRUlLCpk2bCAsL4/XXXwfgxRdf5G9/+xubNm2ioKAAgD/84Q/86le/wm63U1paSmBgILt37272NlHTMWepOIuISKexevVqxo4dy7XXXgvA1Vdf3ezz8vJyBg8eTEREBG+//TZbt24F4LbbbmPChAnk5uZy4sQJAG699VaysrKYPXs2O3fupFu3bpztm2JXFsCpOIuISKdhGEarxXLChAnMnz+fLVu28MILLzhed/rDH/7AzJkzqa6uxmazsX//fsaPH09BQQHdunUjISGB1atXExgYSHV1teN6NTU1Lu1EqeIsIiKdxtChQ1m6dCn79+8H4Icffmj2+eHDh+nZsycNDQ28/fbbjuOVlZUMGjSIF198kWuvvZbq6mp27NhB3759mTp1KqNHj2bz5s3Exsayfft2vv76a44fP87ixYsZPXq003l6zQ5hIiIi7mY2m/nNb37DHXfcga+vL1FRUQQFBTk+/8///E8GDRrETTfdREREBIcPHwZg2rRpbN++HcMwGDp0KJGRkWRnZ/PWW29hMpm44YYbeP755+nSpQvz588nISGBEydOMHHiRMxms9N56lWqNtCrVCIizmvLq1SdmV6lEhER6UBUnEVERLyMirOIiIiX0YKwNtiy+1C7bzHnjKqu4z0W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jIqziIiIl1FxFhER8TIqziIiIl5GxVlERMTLqDiLiIh4GRVnERERL+M1LSO92ZbdhwhKW3nB43p6y84mnXnrztN5YhvPf9UZt/X05FaentzGs4knt/Nsjy08xTW6cxYREfEyKs4iIiJexm3Fec+ePYwbN47g4GDCw8MZOXIkFRUVVFVVYbFYACgtLWXq1Kkux8jKynJ6zA8//MCwYcMICQlh2LBhHDhwwOX4IiIi7uCW4mwYBomJicTFxVFZWcm2bdvIyspi7969zc6LiYlh7ty5LsdxpThnZ2czdOhQtm/fztChQ8nOznY5voiIiDu4pTgXFxdjMpmYNGmS45jNZmPw4MHNzluzZg2jRo0CoLa2lokTJxIbG0tUVBQrVqwAIC8vj6SkJEaMGEFISAjTp08HIC0tjWPHjmGz2UhOTm5zbitWrCAlJQWAlJQU/vznP5/PVEVERNqdW1Zrl5eXEx0d7dSYzMxM4uPjWbhwIQcPHmTgwIHcddddANjtdsrKyvDz8yM0NJQpU6aQnZ3N/PnzsdvtTsXZu3cvPXv2BKBnz57s27fvrOfl5OSQk5MDwImjh5yKISIicj685lWqwsJCCgoKePnllwGoq6tj165dAAwdOhR/f38AwsPD2blzJ71793ZrPqmpqaSmpgLg1zPErbFERERO55bibDabWbZsmVNjDMMgPz+f0NDQZsfXrVuHn5+f42dfX18aG11/7/X666/n22+/pWfPnnz77bf06NHD5WuJiIi4g1u+c46Pj6e+vp7c3FzHsZKSEtauXdvimISEBObNm4dhGACUlZWdM47JZKKhocGp3EaPHs2iRYsAWLRoEffcc49T40VERNzNLcXZx8eH5cuXU1RURHBwMGazmYyMDAICAlock56eTkNDA1arFYvFQnp6+jnjpKamYrVanVoQlpaWRlFRESEhIRQVFZGWltbmsSIiIheCj9F0qyotiomJobS01NNpiIh0KPq703XaIUxERMTLqDiLiIh4GRVnERERL6PiLCIi4mVUnEVERLyMVmu3Qffu3enfv7+n02hX3333Hdddd52n02hXmlPHoDl1DO0xp6qqKr7//vt2yqhz8ZrtO71Z//79L7rXAS7GVxw0p45Bc+oYLsY5dSR6rC0iIuJlVJxFRES8jIpzGzR1p7qYaE4dg+bUMWhO0t60IExERMTL6M5ZRETE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q78qEWkjFWeR8xQREcFHH33E008/zSeffIK/vz8AxcXFDBo0iIiICFavXs3WrVsdY5r2aY+IiMBsNtOzZ0/8/Pzo27evo9lA7969ue222wB48MEH+d///d9mcb/44gu2bdvGbbfdhs1mY9GiRezcufOsOTY1DYmOjqaqquqcc7r00ksd/8iIiIjgjjvuwGQyERER0abxInJ+ung6AZGOrl+/fmzYsIEPPviAZ555huHDhzN9+nT+3//7f5SWltK7d28yMjKoq6tzjPHz8wPgkksucfy56efGxkbgzDZ8//qzYRgMGzaMd95555w5NsXw9fV1XL9Lly6cPHnScc7p+ZlMJke803M8PT8RcR/dOYucp2+++YbLLruMBx98kKeeeoqNGzc6Ct21117LkSNHWLZsmdPX3bVrF59//jkA77zzDrfffnuzz2+55RY+/fRT/vGPfwBw9OhRKioq2nz9oKAg7HY7J0+epLq6mvXr1zudo4i4h+6cRc7Tli1bmDZtGpdccgkmk4nf//73XHnllfziF78gIiKCoKAgYmNjnb5uWFgYixYt4pe//CUhISFMnjy52efXXXcdeXl5PPDAA9TX1wMwc+ZM+vXr16br33bbbfTp04eIiAgsFgsDBgxwOkcRcQ91pRLxQlVVVYwaNYry8nJPpyIiHqDH2iIiIl5Gd84iIiJeRnfOIiIiXkbFWURExMuoOIuIiHgZFWcREREvo+IsIiLiZf4/OIRKQhtPxqIAAAAASUVORK5CYII=",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# perform partition\n",
    "iid_part = FMNISTPartitioner(trainset.targets, \n",
    "                            num_clients=num_clients,\n",
    "                            partition=\"iid\",\n",
    "                            seed=seed)\n",
    "\n",
    "# generate partition report\n",
    "csv_file = \"../partition-reports/fmnist_iid_clients_10.csv\"\n",
    "partition_report(trainset.targets, iid_part.client_dict, \n",
    "                 class_num=num_classes, \n",
    "                 verbose=False, file=csv_file)\n",
    "\n",
    "iid_part_df = pd.read_csv(csv_file,header=1)\n",
    "iid_part_df = iid_part_df.set_index('client')\n",
    "for col in col_names:\n",
    "    iid_part_df[col] = (iid_part_df[col] * iid_part_df['Amount']).astype(int)\n",
    "\n",
    "# select first 10 clients for bar plot\n",
    "iid_part_df[col_names].plot.barh(stacked=True)  \n",
    "# plt.tight_layout()\n",
    "plt.legend(loc='center left', bbox_to_anchor=(1, 0.5))\n",
    "plt.xlabel('sample num')\n",
    "plt.savefig(f\"../imgs/fmnist_iid_clients_10.png\", \n",
    "            dpi=400, bbox_inches = 'tight')"
   ]
  },
  {
   "attachments": {},
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# References\n",
    "\n",
    "- Li, Q., Diao, Y., Chen, Q., & He, B. (2021). Federated learning on non-iid data silos: An experimental study. arXiv preprint arXiv:2102.02079."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python [conda env:tf_torch]",
   "language": "python",
   "name": "conda-env-tf_torch-py"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.8.10"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {
    "height": "calc(100% - 180px)",
    "left": "10px",
    "top": "150px",
    "width": "232.727px"
   },
   "toc_section_display": true,
   "toc_window_display": true
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
